如何通过位置从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
答案 0 :(得分:88)
data.table继承自类data.frame
。因此,它在内部是list
(列向量),可以这样处理。
is.list(DT)
#[1] TRUE
幸运的是,列表子集(即[[
)非常快,与[
相比,package data.table没有为它定义方法。因此,您只需使用[[
通过索引提取:
DT[[2]]
#[1] 3 4
答案 1 :(得分:3)
DT[,get(names(DT)[colNb])]
其中colNb可以是整数(所需的列号)或包含列号的变量。