Group and manage data with dplyr

Take a simple dataset

a <- c(1,2,3,4,5,6,7,8) b <- c(1,2,2,1,2,2,2,2) c <- c(1,1,1,2,2,2,3,3) d <- data.frame(a,b,c) 

Now I want to filter my data so we group_by(c) and then delete all the data where b=1 does not exist.

Thus, the results ( e ) should look like d , but without the bottom two lines

I tried using

 e <- d %>% group_by(c) %>% filter(n(b)>1) 

The output should contain data in the green bottom field and delete data in red

enter image description here

+6
source share
2 answers

Try

 d %>% group_by(c) %>% filter(any(b == 1)) 

What gives:

 #Source: local data frame [6 x 3] #Groups: c # # abc #1 1 1 1 #2 2 2 1 #3 3 2 1 #4 4 1 2 #5 5 2 2 #6 6 2 2 
+10
source

You can try

 df <- d %>% mutate(test = ifelse((b != 1) == T, 0, 1)) %>% group_by(c) %>% mutate(test = sum(test)) %>% filter(test != 0) %>% select(-test) 

what gives

 # abc #1 1 1 1 #2 2 2 1 #3 3 2 1 #4 4 1 2 #5 5 2 2 #6 6 2 2 
0
source

Source: https://habr.com/ru/post/989679/


All Articles