ggplot - r生存分析




如何使用dplyr選擇每組中具有最大值的行? (3)

你可以使用top_n

df %>% group_by(A, B) %>% top_n(n=1)

這將按最後一列( value )排名並返回前n=1行。

目前,您無法在不導致錯誤的情況下更改此默認值(請參閱https://github.com/hadley/dplyr/issues/426

我想用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        

嘗試這個:

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在評論中指出的那樣,如果您嚴格只想要每組1行,那麼根據@RoyalITS的答案可能會優先考慮slice 。 如果有多個具有相同的最大值,則此答案將返回多行。


df %>% group_by(A,B) %>% slice(which.max(value))




greatest-n-per-group