2017-05-16 5 views
1

Ein Dummy-Datenrahmen:dplyr: Filter mit einer Sequenz von Reihen (in einer Spalte)

id_family<- c(1, 1, 2, 2, 3, 3) 
people<- c("male", "female", "male", "female", "male", "children") 

dataset <- data.frame(id_family, people) 
dataset 

Meine Ergebnisse:

id_family people 
1   male    
1   female   
2   male    
2   female   
3   male    
3   children 

Was ich will: Filtern Zeilen auf der Grundlage der „männlichen und weiblichen "-Sequenz

Erwartetes Ergebnis: Filterung Familien 1 und 2

id_family people 
1   male    
1   female   
2   male    
2   female   

Ich versuchte Verzögerung/Blei dplyr Funktionen ohne Erfolg zu nutzen:

dataset2 <- dataset %>% 
    filter(people=="male", lead(people)=="female") 
+1

Sie müssen uns mehr Informationen darüber geben, welche Art von Daten möglicherweise in erscheinen könnte 'Dataset' (könnte es mehr als 2 Personen pro Familie geben?) und was möchten Sie den Filter weitergeben (die Familien, die mindestens einen' männlichen' und einen 'weiblichen' haben? Die Familien, die genau ein "Männchen" und ein "Weibchen" haben?) – RoyalTS

+1

In Ihren Daten gibt es keine Spalte mit dem Namen "Situation". – neilfws

+0

Ich habe immer 2 Leute pro Familie (Ich machte eine Filterung bebore) – Wilcar

Antwort

2

Wir all

dataset %>% 
     group_by(id_family) %>% 
     filter(all(c("male", "female") %in% people)) 
# A tibble: 4 x 2 
# Groups: id_family [2] 
# id_family people 
#  <dbl> <fctr> 
#1   1 male 
#2   1 female 
#3   2 male 
#4   2 female 

Oder wie pro die Bemerkungen des OP verwenden können, wenn Auftrag dann wichtig ist

dataset %>% 
     group_by(id_family) %>% 
     filter(first(people)=="male", last(people) == "female", n()==2) 
Verwandte Themen