问题:
在 data.table
中,如何使用 group by
实现与 tidyr
的 complete
命令相同的效果?
on
和 by
在 data.table
中有什么关系?
示例:
dt=data.table(a = c(1,1,2,2,3,3,4,4) , b = c(4,5,6,7,8,9,10,11) , c = c("x","x","x","x","y","y","y","y"))
show(dt)
a b c
1: 1 4 x
2: 1 5 x
3: 2 6 x
4: 2 7 x
5: 3 8 y
6: 3 9 y
7: 4 10 y
8: 4 11 y
目标是获得以下内容:
a b c
1 4 x
1 5 x
1 6 x
1 7 x
2 4 x
2 5 x
2 6 x
2 7 x
3 8 y
3 9 y
3 10 y
3 11 y
4 8 y
4 9 y
4 10 y
4 11 y
所以大概是这样:
setDT(dt)[CJ(a=a,b=b,unique=TRUE), on=.(a,b) , by = .(c)]
但是它不起作用,而且 data.table
的文档在语法的这个方面上很薄弱。
不充分的解决方案:
以下 SO 帖子解决了类似的问题,但在这种情况下并没有提供充分的解决方案。
- 来自 tidyr 的 complete/fill 的 data.table 等效项(没有 group by)
- tidyr::complete() 的 data.table 等效项(没有 group by)
- 带有 group_by 的 tidyr::complete 的 data.table 等效项(问题特定,实际上无法使用 by 命令)
on
? - cmoon
用于执行合并。 - G. Grothendieck