【发布时间】:2019-09-03 11:49:09
【问题描述】:
我想按组进行简单的计算。我经常使用aggregate。要按组gp1、gp2 和gp3 计算我的var 的sum,我做了:
m.temp <- aggregate(var ~ gp1 + gp2 + gp3, df, sum)
效果很好,但速度很慢。在数据表中执行此操作之前,我想尝试更改函数的语法以加快处理速度。然后我做了:
m.temp2 <- aggregate(df$var,
list(df$gp1, df$gp2, df$gp3),
sum)
不幸的是,一个简单的验证告诉我这些计算是不等价的。
> identical(m.temp, m.temp2)
[1] FALSE
变量名称不同,但更糟糕的是,这 2 个结果之间存在 19 477 个观察值(行)的差异,这不是因为某些 NAs 存在...
那么我的第一个问题是:怎么会?这两种语法有什么区别?
为了了解哪种语法更好,我尝试使用简单的 data.table 过程来完成。不幸的是,由于我的语法不正确,我无法得到任何结果,但我不明白我错过了什么。我绑了:
m.temp4 <- df[, list(sum = sum(df$var)),
by = list(gp1, gp2, gp3)]
最后,我也尝试直接聚合一个新列,同样没有结果...
df[, new.col := sum(var), by = list(gp1, gp2, gp3)]
我做错了什么?
【问题讨论】:
-
试试
df[, .(sum = sum(var)), by = .(gp1, gp2, gp3)],我们不需要df$var,它将选择整列而不是组中的值
标签: r data.table aggregate