R - 识别包含任何值集的列

tze*_*ema 5 r tidyverse

我有一个像这样的数据框

df <- data.frame(col1 = c(letters[1:4],"a"),col2 = 1:5,col3 = letters[10:14])
 df
  col1 col2 col3
1    a    1    j
2    b    2    k
3    c    3    l
4    d    4    m
5    a    5    n
Run Code Online (Sandbox Code Playgroud)

我想识别包含以下向量中的任何值的列:

vals=c("a","b","n","w")
Run Code Online (Sandbox Code Playgroud)

一个整洁的解决方案会很棒!

akr*_*run 3

我们可以使用select

library(dplyr)
df %>% 
   select(where(~ any(. %in% vals, na.rm = TRUE)))
Run Code Online (Sandbox Code Playgroud)

-输出

   col1 col3
1    a    j
2    b    k
3    c    l
4    d    m
5    a    n
Run Code Online (Sandbox Code Playgroud)

类似的选项base RFilter

Filter(\(x)  any(x %in% vals, na.rm = TRUE), df)
  col1 col3
1    a    j
2    b    k
3    c    l
4    d    m
5    a    n
Run Code Online (Sandbox Code Playgroud)