高效的方法来划分每一行数据表

时间:2014-10-21 19:44:50

标签: r data.table

我在数据表中有一个大型数据集,但是我通过基本上按组值对列进行求和来创建大表中的聚合表:

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"]),最好的方法是什么?

1 个答案:

答案 0 :(得分:4)

您可以按照评论中的说明将sum更改为mean。有关更一般的答案,请使用.N

dt.aggregate <- dt[, lapply(.SD, function(x){sum(x)/.N}), by = grp]