2017-10-24 1 views
0

ich einen Datenrahmen pop.subset <- haben:dplyr gruppiert Zusammenfassen von Daten mit einer anderen Spalte

state location pop 
WA  Seattle 100 
WA  Kent  20 
OR  foo  30 
CA  foo2  80 

Ich brauche die Stadt in jedem Staat mit der niedrigsten Bevölkerung in einem data.frame gespeichert. ich habe:

result <- pop.subset %>% 
      group_by(state) %>% 
      summarise(min = min(pop)) 

Dies gibt den data.frame:

state min 
WA  20 
... .... etc 

Aber ich brauche auch die Stadt. Ich habe versucht, in der group_by Funktion einschließlich Lage wie folgt: group_by(state, location), aber dann diese gibt dem min mit jeweils einem Zustand gepaart Stadt anstelle des Staates mit der Stadt wie folgt:

state location pop 
WA Seattle 100 
WA Kent  20 
foo foo  foo 

Gibt es eine einfache Lösung, die ich vermisst ? Ich möchte, dass mein Ergebnis so lautet:

state location pop 
WA Kent  20 
... ...  ... etc. 
+0

Können Sie diese Frage bearbeiten, um dem Code und Daten stimmen überein. Zur Zeit haben Sie 'State',' Location' und 'Pop' im Datenrahmen, aber' state' (Kleinbuchstaben 's'), 'location' (Kleinbuchstaben 'l') und' both_sexes_2012' (Wie funktioniert das? das bezieht sich auf "Pop"?) im Code. – neilfws

+0

Oh Entschuldigung, ich habe einen alten Code kopiert, repariert! – siushi

Antwort

0

Ich glaube, Sie von state gruppieren möchten, dann filtern für min(pop):

pop.subset %>% 
    group_by(state) %>% 
    filter(pop == min(pop)) %>% 
    ungroup() 

# A tibble: 3 x 3 
    state location pop 
    <chr> <chr> <int> 
1 WA  Kent 20 
2 OR  foo 30 
3 CA  foo2 80 
+0

Sie sind völlig richtig! Danke, ich bin mir nicht sicher, warum ich das nicht gesehen habe. Versucht, es mit der Zusammenfassung Funktion zu erschweren. – siushi

+0

Es scheint intuitiv, 'summarise' zu ​​verwenden, der Schlüssel ist die Gruppierung. Wenn Sie auf A + B gruppieren, dann ist die Zusammenfassung für A + B, nicht für B. – neilfws

0

Haben Sie so etwas versucht?

result <- pop.subset %>% 
       group_by(state, location) %>% 
       summarise(min = min(both_sexes_2012)) 
+0

Ich habe das versucht, aber dann verbindet es Staaten und Städte zusammen statt der Mindeststadt in jedem Staat. Status Ort Pop. Z.B. Rückkehr WA, Seattle 100 und WA, Kent, 20 statt nur WA, Kent, 20 – siushi

0

Ich verstehe, dies löst es:

library(tibble) 

data<-tribble(~state, ~location, ~pop, 
     "WA",  "Seattle", 100, 
     "WA", "Kent",  20, 
     "OR",  "foo" ,  30, 
     "CA",  "foo2" ,  80 

) 

library(dplyr) 

data%>%group_by(state)%>%summarise(location=location[which.min(pop)] 
            ,min=min(pop)) 


# A tibble: 3 x 3 
    state location min 
    <chr> <chr> <dbl> 
1 CA  foo2 80 
2 OR  foo 30 
3 WA  Kent 20 
+0

Das ist auch toll! – siushi

Verwandte Themen