我想用dplyr在每个组中选择一个最大值的行。如何用dplyr选择每个组中具有最大值的行?
首先我产生一些随机数据,以显示我的问题
set.seed(1)
df <- expand.grid(list(A = 1:5, B = 1:5, C = 1:5))
df$value <- runif(nrow(df))
在plyr,我可以使用自定义功能选择该行。
library(plyr)
ddply(df, .(A, B), function(x) x[which.max(x$value),])
在dplyr中,我使用此代码来获取最大值,但不是具有最大值的行(本例中为C列)。
library(dplyr)
df %>% group_by(A, B) %>%
summarise(max = max(value))
我怎么能做到这一点?感谢您的任何建议。
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
结果在这种情况下是相同的,因为没有重复出现的最大值。否则,'filter'方法将返回每个组的所有最大值(行),而OP的ddply方法和'which.max'只会返回每个组的最大值(第一个)。为了复制这种行为,另一种选择是在dplyr中使用'slice(which.max(value))'。 –