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

say*_*.ff 3 select r subset dataframe dplyr

我有一个数据框,我想对所有列值均符合临界值的行进行子集化。

这是数据帧:

   A B C
1  1 3 5
2  4 3 5
3  2 1 2
Run Code Online (Sandbox Code Playgroud)

我要选择的是所有列均大于2的行。第二行是我想要的。

[1] 4 3 5
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

 subset_data <- df[which(df[,c(1:ncol(df))] > 2),]
Run Code Online (Sandbox Code Playgroud)

但是我的代码并未应用于所有列。您有任何想法我该如何解决。

Ron*_*hah 6

我们可以创建一个逻辑矩阵,将整个数据帧与2进行比较,然后对其进行rowSums处理,然后仅选择值等于其中的列数的那些行df

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

#  A B C
#2 4 3 5
Run Code Online (Sandbox Code Playgroud)

一种dplyr使用filter_all和的方法all_vars

library(dplyr) 
df %>%
 filter_all(all_vars(. > 2))

#  A B C
#1 4 3 5
Run Code Online (Sandbox Code Playgroud)

一种apply方法

df[apply(df > 2, 1, all), ]
Run Code Online (Sandbox Code Playgroud)