-1

我的代码中有一个非常烦人的问题:

library(data.table)
a<-(letters=c(1:20))
b<-rnorm(1:20)
c<-rnorm(1:20)
d<-rnorm(1:20)
final<-data.frame(a,b,c,d)

e<-data.table(final)
g<-e[, lapply(.SD, sum), by =c("a"), .SDcols = 2:4] #calculates a summary of columns for every "by" statement in my large dataframe
h<-g[,2:4]

向量 h 应包括 g 的第 2-4 列,但它包含一个值,即 2:4。但是,在我的脚本中的某些行中,使用 df[,columns] 选择某些列是有效的。有关如何解决此问题的任何想法将不胜感激。

4

1 回答 1

3

编辑:

OP 的问题在 的最新版本中没有实际意义data.table,因为g[ , 2:4]按预期工作(返回 adata.table的所有行和第 2-4 列g);with=FALSE不再需要。留下原来的答案,因为它仍然有效。


数据表常见问题解答中的第一个问题描述了这个问题:(关于为什么DT[,5]返回5

Because, by default, unlike a data.frame, the 2nd argument is an 
expression which is evaluated within the scope of DT. 5 evaluates to 5.

并继续提供一种解决方法:

Having said this, there are some circumstances where referring to a column by
number is ok, such as a sequence of columns. In these situations just do:
DT[,5:10,with=FALSE] 

或者

DT[,c(1,4,10),with=FALSE]
于 2013-07-04T19:20:12.017 回答