如何以简单的方式有条件地删除多个变量的特定行?

An1*_*116 5 r subset dataframe

假设我有这个数据框(但想象它有数百个变量 x、y 等)。

df = data.frame ( x = c(1,2,3,4,5), y = c(1,2,3,4,5))
Run Code Online (Sandbox Code Playgroud)

我希望删除任何变量中包含 1 或 5 的行。

我熟悉以下算法:

df[!(df$x==1|df$x==5|df$y==1|df$y==5),]

Run Code Online (Sandbox Code Playgroud)

但我正在寻找一个可以同时处理数百个变量的小函数。

akr*_*run 7

使用if_any

library(dplyr)
df %>% 
   filter(!if_any(everything(), ~ .x %in% c(1, 5)))
Run Code Online (Sandbox Code Playgroud)

-输出

  x y
1 2 2
2 3 3
3 4 4
Run Code Online (Sandbox Code Playgroud)


Qui*_*ten 2

您可以使用以下代码:

df = data.frame ( x = c(1,2,3,4,5), y = c(1,2,3,4,5))
df[rowSums(df==1|df==5)==0,]
#>   x y
#> 2 2 2
#> 3 3 3
#> 4 4 4
Run Code Online (Sandbox Code Playgroud)

创建于 2022-10-07,使用reprex v2.0.2


df = data.frame ( x = c(1,2,3,4,5), y = c(1,2,3,4,5))
df[rowSums(df[-1]==1|df[-1]==5)==0,]
#>   x y
#> 2 2 2
#> 3 3 3
#> 4 4 4
Run Code Online (Sandbox Code Playgroud)

创建于 2022-10-07,使用reprex v2.0.2