r - 当所有列都大于一个值时过滤行

标签 r dataframe select dplyr subset

我有一个数据框,我想对所有列值都满足我的截止值的行进行子集化。

这是数据框:

   A B C
1  1 3 5
2  4 3 5
3  2 1 2

我想选择的是所有列都大于 2 的行。
第二行是我想要的。
[1] 4 3 5

这是我的代码:
 subset_data <- df[which(df[,c(1:ncol(df))] > 2),]

但我的代码并未应用于所有列。
你知道我该如何解决这个问题吗?

最佳答案

我们可以创建一个逻辑矩阵,将整个数据框与 2 进行比较,然后执行 rowSums并只选择那些值等于 df 中的列数的行

df[rowSums(df > 2) == ncol(df), ]

#  A B C
#2 4 3 5

一个 dplyr使用 filter_all 的方法和 all_vars
library(dplyr) 
df %>% filter_all(all_vars(. > 2))

#  A B C
#1 4 3 5
dplyr > 1.0.0
#1. if_all
df %>% filter(if_all(.fns = ~. > 2))

#2. across
df %>% filter(across(.fns = ~. > 2))

apply方法
#Using apply
df[apply(df > 2, 1, all), ]
#Using lapply as shared by @thelatemail
df[Reduce(`&`, lapply(df, `>`, 2)),]

关于r - 当所有列都大于一个值时过滤行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50789752/

相关文章:

python - 使用第二列的百分比变化填充列中的空值,同时按第三列分组

mysql - 将表名的 "field"添加到UNION的SQL结果中?

javascript - indexof() 不选择字符串的第一个实例

替换文本文件中的第 n 行

r - 从 R 创建 CouchDB 设计文档

r - 在 read.table() : incomplete final line found by readTableHeader

python - 选择更新查询 : Lock wait timeout exceeded error

r - 为无序的重复二元组分配平均值和/或条件分配

python-3.x - 如何删除数据框中空值数量超过 x 的行?

r - 通过连接列连接两个数据框