2017-12-16 15 views
0

Ich habe ein Dataframe df und möchte eine neue Spalte mit dem Minimalwert nach Gruppe einer zweiten Spalte füllen. Frühere Posts behandeln dieses Problem nicht im Zusammenhang mit neuen Spalten, während die ursprünglichen Zeilen und Spalten des Datenrahmens beibehalten werden.neue Spalte mit mutieren aus Minimalwert nach Gruppe einer anderen Spalte erstellen

diese Abtastwerteingang Angenommen:

a <- c(1,1,1,1,2,2,2,2) 
b <- c(NA,1,2,2,3,5,6,NA) 
df <- data.frame(a,b) 
df 

a b 
1 NA   
1 1   
1 2   
1 2   
2 3   
2 5   
2 6   
2 NA   

Was möchte ich diese Ausgabe zu erreichen ist:

a b Min_b 
1 NA 1   
1 1 1   
1 2 1   
1 2 1   
2 3 3   
2 5 3   
2 6 3   
2 NA 3  

Hier sind meine Versuche mit entsprechenden Ausgang:

df %>% group_by(a) %>% mutate(Min_b = min(b, na.rm = TRUE)) 

a b Min_b 
1 NA 1   
1 1 1   
1 2 1   
1 2 1   
2 3 1   
2 5 1   
2 6 1   
2 NA 1  

Die oben gibt das Minimum von Spalte b anstelle des Minimums von Spalte b durch die Gruppen von Spalte a (dh I will das letztere). Danke

df1 %>% group_by(a) %>% mutate(Min_of_b = top_n(-1, wt = b)) 

Error in is_scalar_integerish(n) : argument "n" is missing, with no default 

für irgendwelche Vorschläge über alternative Möglichkeiten, dies zu tun:

df %>% group_by(a) %>% top_n(-1, wt = b) 

a b 
1 1 
2 3 

Die oben genannten Arbeiten für die richtigen Werte zu finden, aber scheint nicht innerhalb mutieren zu arbeiten, wie folgt!

+0

Es wäre viel einfacher für uns zu help, wenn Sie Beispieldaten in Ihrer Frage angegeben haben, vielleicht so einfach wie 'dput (head (df))'. Außerdem ist mir nicht klar, wie Ihre erwartete Ausgabe aussehen soll. – r2evans

+0

Nicht klar, wie Sie Ihre ideale Ausgabe erwarten, aber basierend auf dem, was Sie sagten, sollten Sie 'df%>% group_by (id)%>% mutate (neue_spalte = min (zweite_spalte))' stattdessen verwenden. – AntoniosK

+0

Überprüfen Sie Ihre Paketversion? 'df%>% group_by (a)%>% muate (Min_b = min (b, na.rm = WAHR))' funktioniert für mich .... – A5C1D2H2I1M1N2O1R2T1

Antwort

0

Ich habe meinen Fehler herausgefunden. Ich hatte wahrscheinlich plr geladen, nachdem ich dplyr geladen hatte, was group_by falsch funktionierte. Um das Problem zu beheben, ich abgelöst plyr wie folgt:

detach(package:plyr) 

Mein group_by dann richtig gearbeitet, mit dem folgenden Code (der gleiche Datenrahmen oben):

df %>% group_by(a) %>% mutate(Min_b = min(b, na.rm = TRUE)) 

a b Min_b 
1 NA 1   
1 1 1   
1 2 1   
1 2 1   
2 3 3   
2 5 3   
2 6 3   
2 NA 3 
Verwandte Themen