我有两个data.table
s:
library(data.table) # 1.9.6
DT1 <- data.table(id = rep(c("a", "b"), c(3, 2)),
x = c(6,12,15,37,41),
y = 1)
DT1[]
DT2 <- data.table(id = rep(c("a", "b"), c(4, 5)),
x = c(2,7,11,15,27,30, 35, 38,40))
DT2[]
我想与表格进行滚动连接,并通过引用更新DT2
来自y
的{{1}}值。这几乎可以满足我的需求:
DT1
但是,我注意到此操作后
DT2[DT1, y := y, on = c("id", "x"), roll = -Inf]
DT2[]
有DT2[4]
,而如果我滚动连接a)没有y = 1
的第2行或没有DT1
的第3行,我总是得到相同的结果,因为在这两种情况下,DT1中的y连接到DT1
中的第4行 - 例如:
DT2
我希望得到的结果是
DT2[, y:= NULL]
DT2[DT1[!2], y := y, on = c("id", "x"), roll = -Inf]
DT2[]
DT2[, y:= NULL]
DT2[DT1[!3], y := y, on = c("id", "x"), roll = -Inf]
DT2[]
即。如果连接导致&#34; cell&#34;中的多个值,我想要总/聚合值。这可以使用DT2[4, y := 2][]
滚动连接和按引用更新功能吗?
答案 0 :(得分:2)
一个丑陋的解决方法是构建聚合表,然后第二次合并:
agg = DT2[DT1, on=.(id, x), roll=-Inf, .(id, x = x.x, y = i.y)][, sum(y), by=.(id, x)]
DT2[agg, on=.(id, x), roll=-Inf, y := i.V1 ]
我认为 There's an open FR允许DT2[DT1, on=.(id,x), y := sum(i.y), by=x.x]
。