R 数据表中按组的非等自联接

R 数据表中按组的非等自联接,r,join,data.table,self-join,R,Join,Data.table,Self Join,假设我有数据: dat = data.table(A=c(1,2,3,1,4,5,1,2,3),B=c(1,1,1,NA,1,NA,2,NA,2), C=c(1,12,24.2,251,2,1,2,3,-1),D=c(1,1,1,1,1,2,2,2,2)) 这看起来像: > dat A B C D 1: 1 1 1.0 1 2: 2 1 12.0 1 3: 3 1 24.2 1 4: 1 NA 251.0 1 5: 4 1

假设我有数据:

dat = data.table(A=c(1,2,3,1,4,5,1,2,3),B=c(1,1,1,NA,1,NA,2,NA,2),
                 C=c(1,12,24.2,251,2,1,2,3,-1),D=c(1,1,1,1,1,2,2,2,2))
这看起来像:

> dat
   A  B     C D
1: 1  1   1.0 1
2: 2  1  12.0 1
3: 3  1  24.2 1
4: 1 NA 251.0 1
5: 4  1   2.0 1
6: 5 NA   1.0 2
7: 1  2   2.0 2
8: 2 NA   3.0 2
9: 3  2  -1.0 2
我想要期望的输出,通过D组,跟踪B中出现的任何元素的A的累积和。所以输出应该是:

> dat
   A  B     C D cumsum
1: 1  1   1.0 1      1
2: 2  1  12.0 1      1
3: 3  1  24.2 1      1
4: 1 NA 251.0 1     NA
5: 4  1   2.0 1    252
6: 5 NA   1.0 2     NA
7: 1  2   2.0 2      0
8: 2 NA   3.0 2     NA
9: 3  2  -1.0 2      3
我最初的尝试是使用样式解决方案,但使用了groupby(我喜欢它,因为我认为它非常有效,并且应该扩展到大量组):

但是,这产生了一个不正确的结果:

> dat
   A  B     C D rn    cs cumsum
1: 1  1   1.0 1  1   1.0      1
2: 2  1  12.0 1  2  12.0     NA
3: 3  1  24.2 1  3  24.2     NA
4: 1 NA 251.0 1  4 252.0      0
5: 4  1   2.0 2  1   2.0      1
6: 5 NA   1.0 2  2   1.0      0
7: 1  2   2.0 2  3   2.0     NA
8: 2 NA   3.0 2  4   3.0      0
9: 3  2  -1.0 2  5  -1.0     NA

有人能告诉我哪里出错了吗

on=(A=B,rn,D)
——滚动总是在
on=
中的最后一列,所以也许你是想让
rn
最后一列?我想是这样的,不知道滚动是怎么回事,在数据表文档中倾泻而过,只是错过了这个,谢谢你
on=(A=B,rn,D)
--滚动总是在
on=
中的最后一列,所以也许你想让
rn
在最后一列?我想是这样的,我不知道滚动,在数据表文档上倾泻,只是错过了这个,谢谢
> dat
   A  B     C D rn    cs cumsum
1: 1  1   1.0 1  1   1.0      1
2: 2  1  12.0 1  2  12.0     NA
3: 3  1  24.2 1  3  24.2     NA
4: 1 NA 251.0 1  4 252.0      0
5: 4  1   2.0 2  1   2.0      1
6: 5 NA   1.0 2  2   1.0      0
7: 1  2   2.0 2  3   2.0     NA
8: 2 NA   3.0 2  4   3.0      0
9: 3  2  -1.0 2  5  -1.0     NA