我有以下data.table
:
> dt= data.table(num=c(1,2,1,1,2, 3, 3,2), letters[1:8])
> dt
num V2
1: 1 a
2: 1 c
3: 1 d
4: 2 b
5: 2 e
6: 2 h
7: 3 f
8: 3 g
我想将所有num equals过滤为1和2并获得结果data.table。我可以这样做:
> dt[num==1 | num==2,]
num V2
1: 1 a
2: 1 c
3: 1 d
4: 2 b
5: 2 e
6: 2 h
或者:
rbind(setkey(dt, num)[J(1)],setkey(dt, num)[J(2)])
但是有没有setkey的选项,所以第二个表达式更短,如:
setkey(dt, num)[1|2]
由于setkey代码对于非常大的数量来说更快...我会感激一些帮助!
答案 0 :(得分:1)
除了KFB的评论之外:
setkey(dt, num)[num %in% c(1,2)]
如果过滤值是序列中的整数:
setkey(dt,num)[J(1:2)] # OR
setkey(dt,num)[seq]
如果它们是任意的:
setkey(dt,num)[J(c(1,2)]
注意1:这可能不适用于data.table
的旧版本
注2:.
是J
的别名,更具可读性:
setkey(dt,num)[.(1:2)]
FWIW,我喜欢将magrittr
包与data.table
一起使用,并尽可能清楚地说明一切:
dt %>% setkey(num)
dt[ .(1:2) ]
缺点是你不能在一条线上整齐地做到这一点。