【问题标题】:Efficient way to divide each row of data table划分数据表每一行的有效方法
【发布时间】:2014-12-17 04:02:03
【问题描述】:

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

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

【问题讨论】:

  • 为什么不把sum改成mean

标签: r data.table


【解决方案1】:

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

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

【讨论】:

  • 我收到以下错误:Error in Summary.factor(c(19370L, 22949L, 15814L, 15188L, 3797L, 20024L, : sum not meaningful for factors
  • 所以换个例子。您正在尝试将 sum 应用于因子变量。首先检查每个变量是一个数字(使用glimpse)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-15
  • 2020-06-14
  • 1970-01-01
  • 2019-12-10
  • 2019-08-14
  • 2020-02-03
相关资源
最近更新 更多