我有两个数据集,一个是weight的详细数据集,另一个是摘要数据集。我正在尝试通过加入明细数据集并进行汇总来创建摘要数据集,但是它没有按预期工作。

这是示例代码。

mytesta <- data.table(cola = c("a","b"), groupa = c(1,2))  # summary
mytestb <- data.table(groupa = c(1,1,1,1,2,2,2), weighta = c(10,20,30,25,15,30,10))  #detail


这是我想要的输出。

   cola groupa weighta
1:    a      1      85
2:    b      2      55


我想做的是

mytesta[mytestb, on = "groupa", weight_summary := sum(i.weighta), by = "groupa"]


问题在于,当使用by时,内部data.table的列会消失(例如,mytesta[mytestb, on = "groupa", .SD, by = "groupa"])。有没有解决的办法?

最佳答案

我会做

mytesta[, v := mytestb[.SD, on=.(groupa), sum(weighta), by=.EACHI]$V1 ]


X[Y]联接中,我们在Y中查找X的每一行。

因此,如果最终目标是在每行计算的Y中创建一个新列,那么即使一开始Y[, v := X[Y, ...]]似乎更直观,我们仍需要连接Y[X, v := ...]

07-25 22:10