r - 通过跨多列测试逻辑条件进行过滤

标签 r dplyr

dplyr 中是否有允许您针对选定的列测试相同条件的函数?

获取以下数据框:

Demo1 <- c(8,9,10,11)
Demo2 <- c(13,14,15,16)
Condition <- c('A', 'A', 'B', 'B')
Var1 <- c(13,76,105,64)
Var2 <- c(12,101,23,23)
Var3 <- c(5,5,5,5)

df <- as.data.frame(cbind(Demo1, Demo2, Condition, Var1, Var2, Var3), stringsAsFactors = F)
df[4:6] <- lapply(df[4:6], as.numeric)

我想取出 Var1、Var2 或 Var3 中至少有一个大于 100 的值的所有行。我意识到我可以用一系列 or 语句来做到这一点,如下所示:
df <- df %>% 
  filter(Var1 > 100 | Var2 > 100 | Var3 > 100)

但是,由于我的实际数据集中有相当多的列,这将非常耗时。我假设有一些相当简单的方法可以做到这一点,但一直无法在 SO 上找到解决方案。

最佳答案

我们可以通过 filter_at 做到这一点和 any_vars

df %>% 
  filter_at(vars(matches("^Var")), any_vars(.> 100))
#   Demo1 Demo2 Condition Var1 Var2 Var3
#1     9    14         A   76  101    5
#2    10    15         B  105   23    5

或使用 base R , 用 lapply 创建一个逻辑表达式和 Reduce并对行进行子集
df[Reduce(`|`, lapply(df[grepl("^Var", names(df))], `>`, 100)),]

关于r - 通过跨多列测试逻辑条件进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50502000/

相关文章:

r - 一张图中两个随机效应的点图

R 结合使用 ifelse 和 eval 的行为

r - 如何通过R中列中NA的数量来改变列的顺序?

r - 在 Dplyr : Evaluation error 中按组计算行数

R:tibble::lst 名称中不需要的引号

r - 将列值与 dplyr::mutate 中的所有前导值进行比较

r - 将均值和标准差应用于数据表的每一列

r - Shiny 的应用程序中的条件边栏取决于所选的选项卡

java - R: rJava 在 Mac OSX 10.8.5 'lzma library missing' 和 'libjri.jnilib make error' 上安装失败

r - 在 dplyr 的汇总函数中进行过滤