使用%in%和筛选器in R通过列表筛选多列

使用%in%和筛选器in R通过列表筛选多列,r,dataframe,filter,dplyr,R,Dataframe,Filter,Dplyr,好的,这是我想象的data.frame称为data A1 A2 A3 A4 A5 A6 1 2 45 35 33 38 5 1 23 33 58 47 18 26 78 15 5 6 我要做的是选择任何列中有1或33的所有行 因此,我最初的想法是编写以下代码 a <- paste0("A",1:6) num <- c("1","33") data <- data %>% filter(a %in% num) a我们

好的,这是我想象的
data.frame
称为
data

A1 A2 A3  A4  A5  A6     
1  2  45  35  33  38  
5  1  23  33  58  47
18 26 78  15  5   6
我要做的是选择任何列中有1或33的所有行

因此,我最初的想法是编写以下代码

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

data <- data %>%
  filter(a %in% num)

a我们可以使用
filter\u 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
如果需要对列的子集执行此操作,请使用
filter\u at
并在
vars

data %>%
   filter_at(vars(matches("A\\d+")), any_vars(. %in% c(1, 33)))
vars
也可以获取对象

a <- paste0("A", 1:6)
vals <- c(1, 33)
data %>% 
    filter_at(vars(a), any_vars(. %in%  vals))
a返回基本R:

df[apply(df, 1, function(x) any(x %in% c(1, 33))), ]
  A1 A2 A3 A4 A5 A6
1  1  2 45 35 33 38
2  5  1 23 33 58 47

这个简单的基础R怎么样:

data[rowSums(data==33 | data==1)>=1,]

#  A1 A2 A3 A4 A5 A6
#1  1  2 45 35 33 38
#2  5  1 23 33 58 47
如果你想扩展你的过滤器

filter <- c(1,33)
data[rowSums(matrix(as.matrix(data) %in% filter, nrow(data), ncol(data)))>=1,]
filter=1,]

另一个
base R
选项是
data[Reduce(“|”),lapply(data,“%in%”,c(1,33)),]