好的,这就是我想象的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)
直观地说,虽然这可行,但我不断收到错误结果必须有长度 _不_ 。
任何方式我都可以绕过这个或使用不同的解决方案?谢谢!
答案 0 :(得分: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
如果我们需要对列的子集执行此操作,请使用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))
答案 1 :(得分:2)
回到基地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
答案 2 :(得分:2)
这个简单的基础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,]