如何过滤非%in%?

Vin*_*nzo 2 r

我有一个带有 ID 列的数据框df我使用以下代码来过滤ID向量中包含的df值:

df <- df %>% 
  filter(ID %in% vector)
Run Code Online (Sandbox Code Playgroud)

如何过滤以获取 ID 不包含在向量中而不是包含在向量中的所有 df 值?

dan*_*ooo 7

使用 !反转条件:

df <- df %>% 
  filter(! ID %in% vector)
Run Code Online (Sandbox Code Playgroud)

  • 一开始我总是觉得这很令人困惑,因为我想把 `!%in%` 这**不是**正确的语法。关键是“x %in% y”生成一个“逻辑”“向量”,然后通过在前面添加“!”对其求反。 (3认同)

Kon*_*rad 5

可以说,最优雅的解决方案是通过利用R 中可用的函数式编程Negate功能并使用创建一个%nin%函数来实现,该函数将返回与 提供的结果相反的结果%in%

library("tidyverse")
`%nin%` <- Negate(`%in%`)
mtcars %>%
  filter(cyl %nin% c(6, 4))
#>                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#> Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
#> Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
#> ... (truncated for brevity)
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v2.0.1)于 2022-04-07 创建

如果您正在工作,tidyverse您可能需要考虑使用negate. Tidyverse 函数彼此配合良好,通常在实现1中存在细微差别

library("tidyverse")
`%nin%` <- negate(`%in%`)
mtcars %>%
  filter(cyl %nin% c(6, 4))
#>                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#> Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
#> Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
#> ... (truncated for brevity)
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v2.0.1)于 2022-04-07 创建


1泛函,高级 R