r - 根据同一列中的多个条件过滤 data.table

标签 r data.table

我有以下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/

相关文章:

r - 将向量输出转换为 data.table 中的列?

r - fread: na.strings 中的空字符串 ("") 不会被解释为 NA

r - 计算比当前数字低常数的数字

r - `rowname` - 矩阵列表

r - 选择除一列之外的所有重复行

r - R中的空间聚类(简单示例)

R 与数据帧的其他元素的按行计算

R:如何在没有循环的情况下进行矩阵运算或更有效?

r - 连接整个数据框的列对

r - 合并数据框中的行,其中行不相交并包含 NA