结合"by"和"on"来连接并创建data.table的汇总列

Nau*_*umz 5 r data.table

我有两个数据集,一个是详细的数据集,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
Run Code Online (Sandbox Code Playgroud)

这是我想要的输出.

   cola groupa weighta
1:    a      1      85
2:    b      2      55
Run Code Online (Sandbox Code Playgroud)

我试图做的是,

mytesta[mytestb, on = "groupa", weight_summary := sum(i.weighta), by = "groupa"]
Run Code Online (Sandbox Code Playgroud)

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

Fra*_*ank 2

我会做

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

X[Y]连接中,我们查找Yin的每一行X

因此,如果最终目标是在每行计算中创建一个新列Y,我们将需要一个联接,Y[, v := X[Y, ...]]即使Y[X, v := ...]一开始看起来更直观。