如果我有以下简单的数据表:
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的行数--换句话说,为什么我可以计算.SD中的sum(x),而不能计算nrow(x)?在这方面没有在文件中找到任何东西。
发布于 2017-04-17 14:12:33
.SD是一个data.table,但是当您对它进行lapply时,每个x值都是一个列向量,而nrow对此不起作用。如果要执行length,则返回行数。
DT[,lapply(.SD,function(x){sum(x)/length(x)}),by=Group]
# Group VAL
# 1: A 2.0
# 2: B 1.6https://stackoverflow.com/questions/43453049
复制相似问题