Извлечь столбец из data.table как вектор, по позиции

r vector indexing data.table

57086 просмотра

2 ответа

Как извлечь столбец из data.table в виде вектора по его позиции? Ниже приведены некоторые фрагменты кода, которые я пробовал:

DT<-data.table(x=c(1,2),y=c(3,4),z=c(5,6))
DT
#   x y z
#1: 1 3 5
#2: 2 4 6

Я хочу получить этот вывод, используя положение столбца

DT$y 
#[1] 3 4
is.vector(DT$y)
#[1] TRUE

Другой способ получить этот вывод, используя положение столбца

DT[,y] 
#[1] 3 4
is.vector(DT[,y])
#[1] TRUE

Это не дает вектора

DT[,2,with=FALSE]
#   y
#1: 3
#2: 4
is.vector(DT[,2,with=FALSE])
#[1] FALSE

Эти двое не работают:

DT$noquote(names(DT)[2]) # Doesn't work
#Error: attempt to apply non-function

DT[,noquote(names(DT)[2])] # Doesn't work
#[1] y

И это не дает вектора:

DT[,noquote(names(DT)[2]),with=FALSE] # Not a vector
#   y
#1: 3
#2: 4
is.vector(DT[,noquote(names(DT)[2]),with=FALSE])
#[1] FALSE
Автор: Wet Feet Источник Размещён: 12.11.2019 09:48

Ответы (2)


91 плюса

Решение

Таблица данных наследуется от класса data.frame. Поэтому он является listвнутренним (векторов столбцов) и может рассматриваться как таковой.

is.list(DT)
#[1] TRUE

К счастью, подмножество списков, т. Е. [[Очень быстрое, и, в отличие от [пакета data.table, не определяет для него метод. Таким образом, вы можете просто использовать [[для извлечения по индексу:

DT[[2]]
#[1] 3 4
Автор: Roland Размещён: 18.11.2013 08:43

3 плюса

DT[,get(names(DT)[colNb])]

где colNb может быть целым числом (желаемый номер столбца) или переменной, содержащей номер столбца.

Автор: lokxs Размещён: 03.06.2018 03:07
Вопросы из категории :
32x32