问题描述
用变量名索引DT列后,数据以类型data.table data.frame
返回,并且该列不是可访问的向量,因此我必须首先将其取消列出。我在按预期做一切吗?
考虑以下示例:
require(data.table)
DT <- data.table(a=seq(1.001,10.999,length=100),b=factor(c(rep('a',55),rep('b',45))))
col.name <- 'a'
diff(DT[,col.name]) #column name not found error
diff(DT[,col.name,with=FALSE]) #null data table
diff(DT[,with=FALSE][[1]]) #works
第二个例子是关于什么问题。
解决方法
您有许多选择来检索单列。我认为,最可读的方法是使用.SD
,尽管不是最快的方法。通常也希望不要将单列data.table
转换为向量。
require(data.table)
DT <- data.table(a=seq(1.001,10.999,length=100),b=factor(c(rep('a',55),rep('b',45))))
DT[,get(col.name) ] # vector
DT[[ col.name ]] # vecotr
DT[,col.name,with = FALSE ] # data.table
DT[,.SD,.SDcols = col.name ] # data.table
,
在给定输入的情况下,两种(直接)获取矢量而不是data.table的方法:
DT[,get(col.name)]
DT[[col.name]] # as per comment by ismirsehregal
还有一些像DT[,with=FALSE][[1]]
一样令人费解的
with(DT,eval(parse(text=col.name)))
DT[,..col.name][[1]] # as per comment by ismirsehregal