我有一个数据框,我想对所有列值都满足我的截止值的行进行子集化。
这是数据框:
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/