在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)
Run Code Online (Sandbox Code Playgroud)
我想在Var1,Var2或Var3的任何一行中获取至少有一个大于100的值的所有行.我意识到我可以用一系列或语句来做到这一点,如下所示:
df <- df %>%
filter(Var1 > 100 | Var2 > 100 | Var3 > 100)
Run Code Online (Sandbox Code Playgroud)
但是,由于我的实际数据集中有很多列,这将非常耗时.我假设有一些相当直接的方法来做到这一点,但无法在SO上找到解决方案.
我们可以用filter_atand来做到这一点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
Run Code Online (Sandbox Code Playgroud)
或者使用base R,使用 and 创建一个逻辑表达式,lapply并对Reduce行进行子集化
df[Reduce(`|`, lapply(df[grepl("^Var", names(df))], `>`, 100)),]
Run Code Online (Sandbox Code Playgroud)