首页 > 解决方案 > data.table 等效于 dplyr::%in% 使用 ! (非)运算符

问题描述

R 中的 data.table 包语法中是否有以下代码的等效版本?

以下代码行在 mtcars 数据集中过滤不包含集合中 cyl 值的行 (4,6)

在 dplyr 中,此代码如下所示:

mtcars %>% filter(!(cyl %in% c(4,6)))

data.table 中是否有等效的语法来执行嵌套的 %in% 操作!不是运算符来过滤表中的行?

您可以通过以下代码运行示例:

library(tidyverse) 
mtcars %>% filter(!(cyl %in% c(4,6)))

标签: rdplyrdata.table

解决方案


像这样?下面是如何对data.table. 与您的dplyr代码相比,该部分!(cyl %in% c(4,6))与您的原始代码完全相同。所以在这种情况下,您唯一需要学习的dt[..code.., ]是与 等价的df %>% filter(..code..),其中..code..是用于评估每一行条件的逻辑语句。

library(data.table)
dat <- mtcars
setDT(dat)[!(cyl %in% c(4,6)), ]
#      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#  1: 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
#  2: 14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
#  3: 16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
#  4: 17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
#  5: 15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
#  6: 10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
#  7: 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
#  8: 14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
#  9: 15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
# 10: 15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
# 11: 13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
# 12: 19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
# 13: 15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
# 14: 15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8

推荐阅读