我想知道是否有一种优雅的data.table(v1.9.4)方法来执行以下操作: 通过两个变量对DT进行分组,然后为.SD中的所有条目计算分组表(.SD)上的某些函数,但是其中一个应该滚动.SD并将结果放回DT中。因此,结果(可能)对于.SD中的每个条目(以及因此DT)是唯一的。您可以将其视为为DT中的条目的对等组计算某个值,并且该对等组由两个分组变量(与DT中的条目相同的属性)确定,但是条目本身。
我用一个简单的循环来完成这个:= data.table的j,但是想知道是否有一个纯data.table解决方案。我可以想象.SD[i != id , := , by=1:nrow(.SD)]
内DT[]
之类的东西可以做到这一点但是:
在
:=
的{{1}}中使用j
保留供将来用作(通过群组引用)更新.SD
的(错误)灵活方式
我所拥有的解决方案是(由DT
和sum()
确定的组b
除了滚动ID之外):
c
我们是否需要DT <- data.table(ID = c("a","a","b","b","c","c"),
b = c(1, 2, 1, 2, 1, 2),
c = c("x", "x", "y", "z", "y", "x"),
Var1 = 1:6)
for (id2 in unique(DT$ID)) {
for (b2 in unique(DT$b)) {
c2 <- DT[ID==id2 & b==b2, c]
DT[ID == id2 & b == b2,
Var1_sum := sum(DT[ID! = id2 & b == b2 & c == c2, Var1], na.rm=TRUE)]
}
}
DT
ID b c Var1 Var1_sum
1: a 1 x 1 0
2: a 2 x 2 6
3: b 1 y 3 5
4: b 2 z 4 0
5: c 1 y 5 3
6: c 2 x 6 2
的{{1}}中的未来功能:=
?