【发布时间】:2019-10-15 08:34:48
【问题描述】:
我得到一个需要根据第一列汇总的大型数据表:
问题如下:
- 对于多个列,只需对每个类别求和(在第 1 列中给出)
- 对于其他列,必须计算平均值
- 第一列和第二列中的条目之间存在 1-1 对应关系。这样应该保留第二列的条目。
以下是此类数据表的一个可能示例。假设第 3-9 列需要求和,第 10-12 列需要平均。
library(data.table)
set.seed(1)
a<-matrix(c("cat1","text1","cat2","text2","cat3","text3"),nrow=3,byrow=TRUE)
M<-do.call(rbind, replicate(1000, a, simplify=FALSE)) # where m is your matrix
M<-cbind(M,matrix(sample(c(1:100),3000*10,replace=TRUE ),ncol=10))
M <- as.data.table(M)
结果应该是表格的表格
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12
1: cat1 text1 27 81 78 95 27 22 12 76 18 76
2: cat2 text2 38 48 70 100 11 97 8 53 56 33
3: cat3 text3 58 18 66 24 14 73 18 27 92 70
但对于条目,相应的总和各自的平均值。
【问题讨论】:
-
什么是
a?另外,请提供一个可重复的小示例和预期输出 -
M[, c(lapply(.SD[, 2:8, with=FALSE], sum), lapply(.SD[, 9:11, with=FALSE], mean)), by = "cat"] -
在上面的例子中使用
M[, c(lapply(.SD[, 3:9, with=FALSE], sum), lapply(.SD[, 10:12, with=FALSE], mean)), by = "V1"],产生:Error in FUN(X[[i]], ...) : invalid 'type' (character) of argument -
@Strickland 那是因为您的 V3:V12 实际上是
chr的类而不是dbl我在此之前添加了一行将它们转换为数字类。看我的回答。
标签: r data.table aggregate