我在数据表中有一个大型数据集,但是我通过基本上按组值对列进行求和来创建大表中的聚合表:
dt <- data.table("grp"=c("a","b","a","c","c","d"), "1"=c(1,45,3,6,2,5), "2"=c(3,36,45,5,12,10), "3"=c(30,3,4,5,2,5), "4"=c(3,3,44,5,2,76), "5"=c(3,3,48,5,2,1), "6"=c(13,73,94,5,2,5))
> dt
grp 1 2 3 4 5 6
1: a 1 3 30 3 3 13
2: b 45 36 3 3 3 73
3: a 3 45 4 44 48 94
4: c 6 5 5 5 5 5
5: c 2 12 2 2 2 2
6: d 5 10 5 76 1 5
我创建了一个聚合表
dt.aggregate <- dt[,lapply(.SD,sum),by=grp]
grp 1 2 3 4 5 6
1: a 4 48 34 47 51 107
2: b 45 36 3 3 3 73
3: c 8 17 7 7 7 7
4: d 5 10 5 76 1 5
我想根据原始数据表中每组的数字行来划分每一行。
例如row1我想除以nrow(dt[grp=="a"])
,最好的方法是什么?
答案 0 :(得分:4)
您可以按照评论中的说明将sum
更改为mean
。有关更一般的答案,请使用.N
dt.aggregate <- dt[, lapply(.SD, function(x){sum(x)/.N}), by = grp]