为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

jeck猫 2019-06-26 13:44:22
如何选择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
查看完整描述

3 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

试试这个:

result <- df %>% 
             group_by(A, B) %>%
             filter(value == max(value)) %>%
             arrange(A,B,C)

似乎奏效了:

identical(
  as.data.frame(result),
  ddply(df, .(A, B), function(x) x[which.max(x$value),]))#[1] TRUE

正如@docendo在评论中指出的,slice如果您严格地只想每组1行,请按下面的@RoyalITS回答,这里可能会优先考虑。如果存在具有相同最大值的多行,此答案将返回多行。


查看完整回答
反对 回复 2019-06-26
  • 3 回答
  • 0 关注
  • 1313 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信