r - 使用 %in% 通过列表过滤多列并在 R 中过滤

标签 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)

直觉上我虽然这可行,但我不断收到错误结果必须有长度_ not _

有什么方法可以解决这个问题或使用不同的解决方案?谢谢!

最佳答案

我们可以使用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

如果我们需要对列的子集执行此操作,请使用 filter_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))

关于r - 使用 %in% 通过列表过滤多列并在 R 中过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48503764/

相关文章:

删除列表中的元素

r - 我想创建一个数字来替换 R 中的字符

r - 如何匹配以逗号分隔的两个列元素

html - CSS 悬停不显示

javascript - "10 $digest() iterations reached. Aborting!"由于使用 angularjs 进行过滤

r - 在 R 中保存带有长字符串的 .data 文件

r - 使用facet_wrap将r平方注释为ggplot

javascript - 是否可以从 array.filter 方法返回每个值而不是数组?

r - 给出函数中常见的缺失参数

r - heatmap.2 和颜色键刻度线