Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

filter rows when all columns greater than a value

I have a data frame and I would like to subset the rows where all columns values meet my cutoff.

here is the data frame:

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

What I would like to select is rows where all columns are greater than 2. Second row is what I want to get.

[1] 4 3 5

here is my code:

 subset_data <- df[which(df[,c(1:ncol(df))] > 2),]

But my code is not applied on all columns. Do you have any idea how can I fix this.

like image 675
say.ff Avatar asked Jun 11 '18 02:06

say.ff


People also ask

How do I filter rows in Excel?

Select any cell within the range. Select Data > Filter. Select Text Filters or Number Filters, and then select a comparison, like Between. Enter the filter criteria and select OK.


1 Answers

We can create a logical matrix my comparing the entire data frame with 2 and then do rowSums over it and select only those rows whose value is equal to number of columns in df

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

#  A B C
#2 4 3 5

A dplyr approach using filter_all and 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))

An apply approach

#Using apply
df[apply(df > 2, 1, all), ]
#Using lapply as shared by @thelatemail
df[Reduce(`&`, lapply(df, `>`, 2)),]
like image 104
Ronak Shah Avatar answered Oct 06 '22 00:10

Ronak Shah