【发布时间】:2016-04-26 15:46:15
【问题描述】:
我有这个 DT:
dt=data.table(ID=c(rep(letters[1:2],each=4),'b'),value=seq(1,9))
ID value
1: a 1
2: a 2
3: a 3
4: a 4
5: b 5
6: b 6
7: b 7
8: b 8
9: b 9
我需要在子集时消除组,但前提是数据满足某些条件。这样的事情不起作用:
dt[,{if (.N==4) .SD else NULL
v1},by="ID"]
所以我需要删除不符合条件的组。在此示例中,我想跳过长度不同于 4 的组。这样我得到:
ID value
1: a 1
2: a 2
3: a 3
4: a 4
但我无法解决这个问题,我将不胜感激。
【问题讨论】:
-
dt[, if (.N==4) .SD, by="ID"]能回答你的问题吗? -
@jangorecki:为什么不发帖?
-
有一个类似
DT[,.SD, by=ID, having={.N == 4L}]github.com/Rdatatable/data.table/issues/788fyi的语法的FR -
可以添加他的答案吗?
-
@AldoPareja 添加
NULL的工作原理完全相同(因为这就是省略else所做的):dt[,if (.N==4) .SD else NULL, by = ID]- 你的表达中唯一的问题是无处不在的v1
标签: r group-by data.table aggregate subset