Ich möchte mit dplyr eine Zeile mit maximalem Wert in jeder Gruppe auswählen.Wie wählt man die Zeilen mit maximalen Werten in jeder Gruppe mit dplyr?
Erstens erzeugen ich einige Zufallsdaten meine Frage
set.seed(1)
df <- expand.grid(list(A = 1:5, B = 1:5, C = 1:5))
df$value <- runif(nrow(df))
In plyr zu zeigen, ich eine benutzerdefinierte Funktion verwenden, könnte diese Zeile auszuwählen.
library(plyr)
ddply(df, .(A, B), function(x) x[which.max(x$value),])
In dplyr ich diesen Code bin mit dem Maximalwert zu erhalten, aber nicht die Zeilen mit Maximalwert (Spalte C in diesem Fall).
library(dplyr)
df %>% group_by(A, B) %>%
summarise(max = max(value))
Wie konnte ich das erreichen? Danke für jeden Vorschlag.
sessionInfo()
R version 3.1.0 (2014-04-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=English_Australia.1252 LC_CTYPE=English_Australia.1252
[3] LC_MONETARY=English_Australia.1252 LC_NUMERIC=C
[5] LC_TIME=English_Australia.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] dplyr_0.2 plyr_1.8.1
loaded via a namespace (and not attached):
[1] assertthat_0.1.0.99 parallel_3.1.0 Rcpp_0.11.1
[4] tools_3.1.0
Die Ergebnisse sind in diesem Fall identisch, da keine doppelten Maximalwerte vorhanden sind. Andernfalls würde der "Filter" -Ansatz alle maximalen Werte (Zeilen) pro Gruppe zurückgeben, während die ddply-Annäherung des OP mit 'which.max' nur ein Maximum (das erste) pro Gruppe zurückgeben würde. Um dieses Verhalten zu replizieren, besteht eine andere Möglichkeit darin, 'slice (which.max (value))' in dplyr zu verwenden. –