2016-10-25 3 views
-1

Sagen wir, ich habe einen DatenrahmenExtrahieren Sie eine bestimmte Anzahl von Zeilen im Datenrahmen basierend auf der Bedingung in R?

Group Pos Score 
A  V 82 
A  V 72 
A  W 95 
A  W 92 
A  W 65 
A  W 61 
A  X 82 
A  X 80 
A  X 70 
B  V 88 
B  V 77 
B  W 95 
B  W 91 
B  W 85 
B  W 71 
B  X 88 
B  X 83 
B  X 78 
... 
#this data frame has groups with values C, D, E, etc also 

Lasst uns sagen, dass ich für jeden Group die obere Reihe von Partituren halten wollen, und jede Pos. Zum Beispiel, sagen wir, ich die Besten 1 Score für Pos=V, Top-3 Score s für Pos=W und Top 2 Score s von Pos=X

Deshalb möchte ich die Datenrahmen aussehen

Group Pos Score 
A  V 82 
A  W 95 
A  W 92 
A  W 65 
A  X 82 
A  X 80 
B  V 88 
B  W 95 
B  W 91 
B  W 85 
B  X 88 
B  X 83 

behalten möchten Wie kann ich das in R machen?

Antwort

1

Wir

versuchen
v1 <- unique(df1$Pos) 
Map(function(x,y) 
    filter(df1, Pos==x) %>% 
     group_by(Group) %>% 
     top_n(y, wt = Score), v1, c(1, 3, 2)) %>% 
    bind_rows() 
+0

dies zum größten Teil gearbeitet. Ein Problem ist in dem Fall, wo 2 Punkte gebunden waren. Zum Beispiel, wenn ich den Datenrahmen in meiner Frage so modifiziere, dass es 2 Einträge von 'A V 82' gibt, wird dein Code 2 Zeilen 'A V 82' zurückgeben, anstatt nur 1. Wie kann ich das beheben? – user5739619

+0

Auch, nachdem ich Ihren Code ausführen, wie kann ich die durchschnittliche Punktzahl für jede "Gruppe" und "Pos" erhalten. Wie kann ich zum Beispiel für "A X 82" und "A X 80" 'A X 81 'zurückgeben, da 81 der Durchschnitt von 82 und 80 ist? – user5739619

+0

@ user5739619 Um die durchschnittliche Punktzahl zu erhalten%%% group_by (Gruppe, Pos)%>% summieren (Mittelwert = Mittelwert (Score)) 'Der erste Teil ist mir nicht klar genug. – akrun

Verwandte Themen