使用%in%过滤列表中的多列并在R中过滤

Zac*_*ing 2 r filter dataframe dplyr

好了,所以这里是我的想象data.framedata

A1 A2 A3  A4  A5  A6     
1  2  45  35  33  38  
5  1  23  33  58  47
18 26 78  15  5   6
Run Code Online (Sandbox Code Playgroud)

我想要做的是选择任何列中包含1或33的所有行

所以我最初的想法是编写以下代码

a <- paste0("A",1:6)
num <- c("1","33")

data <- data %>%
  filter(a %in% num)
Run Code Online (Sandbox Code Playgroud)

直觉上我虽然这会工作,但我一直得到错误结果必须有长度_不_.

我可以用任何方式绕过这个或使用不同的解决方案吗?谢谢!

akr*_*run 5

我们可以这样做 filter_all

library(dplyr)
data %>% 
    filter_all(any_vars(. %in% c(1, 33)))
#  A1 A2 A3 A4 A5 A6
#1  1  2 45 35 33 38
#2  5  1 23 33 58 47
Run Code Online (Sandbox Code Playgroud)

如果我们需要在列的子集上执行此操作,请使用filter_at并指定列索引或namesininvars

data %>%
   filter_at(vars(matches("A\\d+")), any_vars(. %in% c(1, 33)))
Run Code Online (Sandbox Code Playgroud)

vars也可以采取的对象

a <- paste0("A", 1:6)
vals <- c(1, 33)
data %>% 
    filter_at(vars(a), any_vars(. %in%  vals))
Run Code Online (Sandbox Code Playgroud)