.SD的行数

时间:2017-04-17 14:04:45

标签: r data.table

如果我有以下简单数据表:

DT <- data.table(VAL = sample(c(1, 2, 3), 10, replace = TRUE),Group = c(rep("A",5),rep("B",5)))

我可以通过以下方式计算平均值:

DT[,lapply(.SD,function(x){mean(x)}),by=Group]

我也可以使用:

DT[,lapply(.SD,function(x){sum(x)/.N}),by=Group]

但我的问题是,为什么以下不起作用:

DT[,lapply(.SD,function(x){sum(x)/nrow(x)}),by=Group]

根据我的理解,.SD是完整数据表的子数据表,所以通过函数(x)我应该能够引用x的行数 - 换句话说,为什么我可以计算sum(x) ),但不是.SD中的nrow(x)?在这方面的文档中没有找到任何内容。

1 个答案:

答案 0 :(得分:4)

.SDdata.table,但是当您lapply时,每个x值都是列向量nrow 1}}不起作用。如果你改为length,它会返回行数。

DT[,lapply(.SD,function(x){sum(x)/length(x)}),by=Group]
#    Group VAL
# 1:     A 2.0
# 2:     B 1.6