如何选择dplyr组中具有最大值的行?

如何选择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


jeck猫
浏览 1321回答 3
3回答

慕丝7291255

试试这个:result&nbsp;<-&nbsp;df&nbsp;%>%&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;group_by(A,&nbsp;B)&nbsp;%>% &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filter(value&nbsp;==&nbsp;max(value))&nbsp;%>% &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arrange(A,B,C)似乎奏效了:identical( &nbsp;&nbsp;as.data.frame(result), &nbsp;&nbsp;ddply(df,&nbsp;.(A,&nbsp;B),&nbsp;function(x)&nbsp;x[which.max(x$value),]))#[1]&nbsp;TRUE正如@docendo在评论中指出的,slice如果您严格地只想每组1行,请按下面的@RoyalITS回答,这里可能会优先考虑。如果存在具有相同最大值的多行,此答案将返回多行。
打开App,查看更多内容
随时随地看视频慕课网APP