gpt4 book ai didi

r - 使用 'summarise' 的数据帧列的第二(或第三)最大值

转载 作者:行者123 更新时间:2023-12-04 03:10:57 27 4
gpt4 key购买 nike

假设我有一个这样的数据框:

group1 <- c('a','a','a','a','a','a','b','b','b','b','b','b','b','b')
group2 <- c('x','y','x','y','x','y','x','y','x','y','x','y','x','y')
value <- round(runif(14, min=0, max=1), digits = 2)

df1 <- as.data.frame(cbind(group1,group2,value))
df1$value <- as.numeric(df1$value)

使用 dplyr 可以很容易地得到一个只有每组最大值的新数据框。包装和 summarise功能:
df2 <- summarise(group_by(df1,group1),max_v = max(value))

但我想要的是一个新的数据框,每个组的 3 个最大值,做这样的事情:
df2 <- summarise(group_by(df1,group1),max_v = max(value),max2_v = secondmax(value),max3_v = thirdmax(value))

有没有办法在不使用 sort 的情况下做到这一点?功能 ?

最佳答案

我们可以使用 arrange/slice/spread得到这个的方法

library(dplyr)
library(tidyr)
df1 %>%
group_by(group1) %>%
arrange(desc(value)) %>%
slice(seq_len(3)) %>%
mutate(Max = paste0("max_", row_number())) %>%
select(-group2) %>%
spread(Max, value)
# A tibble: 2 x 4
# Groups: group1 [2]
# group1 max_1 max_2 max_3
#* <fctr> <dbl> <dbl> <dbl>
#1 a 0.84 0.69 0.41
#2 b 0.89 0.72 0.54
数据
df1 <- data.frame(group1,group2,value)

关于r - 使用 'summarise' 的数据帧列的第二(或第三)最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45335579/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com