我有以下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
我想过滤所有等于 1 和 2 的 num 并获取结果 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 代码对于大量数据来说速度更快...我希望得到一些帮助!
最佳答案
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) ]
缺点是您无法在一行中整齐地完成此操作。
关于r - 根据同一列中的多个条件过滤 data.table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26927912/