【发布时间】:2013-04-05 09:33:16
【问题描述】:
假设我有以下两个数据表:
dt1 <- data.table(id=1:3,val1=c("a","a","b"),key="id")
# id val1
# 1: 1 a
# 2: 2 a
# 3: 3 b
dt2 <- data.table(id=c(1:3,1:2),val2=10:14,key="id")
# id val2
# 1: 1 10
# 2: 1 13
# 3: 2 11
# 4: 2 14
# 5: 3 12
假设dt1 是由他们的id 识别的人员列表,dt2 是对这些人的观察列表,通讯员id。
现在,我想计算每组val1 的val2 的平均值。我知道我可以通过以下方式做到这一点:
dt1[dt2][,mean(val2),by=val1]
# val1 V1
# 1: a 12
# 2: b 12
但我也在常见问题解答(第 1.14 节)中读到它效率不高(至少对于非常大的数据表)。
那么,有没有更好、更有效的方法呢?
编辑:另一个相关问题:我刚刚看到以下两行将给出相同的结果:
dt1[dt2][,mean(val2),by=val1]
dt2[dt1][,mean(val2),by=val1]
它们是等价的还是两者之间有区别?
【问题讨论】:
-
我怀疑 reshape 包可能会有所帮助(尽管我还没有为您提供详细的解决方案)。将两个数据集转换为长格式,将它们连接在一起,然后再转换回来。
标签: r data.table