gpt4 book ai didi

R 子集 data.frame 从一个向量的最大值并按另一个分组

转载 作者:行者123 更新时间:2023-12-04 17:47:24 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Select the row with the maximum value in each group

(17 个回答)


4年前关闭。



>ID<-c('A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C')
>WK<-c(1, 2, 3, 1, 2, 3, 1, 2, 3, 4, 5)
>NumSuccess<-c(0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 3)
>Data<-data.frame(ID, WK, NumSuccess)

我正在尝试根据“NumSuccesses”中的值创建一个子集 data.frame“Data2”,该值对应于按“ID”分组的“WK”中的最大值。生成的 data.frame 应如下所示:
>ID<-c('A','B','C')
>WK<-c(3, 3, 5)
>NumSuccess<-c(2, 1, 3)
>Data2<-data.frame(ID, WK, NumSuccess)

最佳答案

这可以通过不止一种方式完成。如果 'WK' 有关系,每个 'ID' 的最大值并且想要所有具有最大 'WK' 的行,这可能对 filter 有用。在按“ID”分组后使用逻辑条件( WK==max(WK) )。

library(dplyr)
Data %>%
group_by(ID) %>%
filter(WK==max(WK))
# ID WK NumSuccess
#1 A 3 2
#2 B 3 1
#3 C 5 3

如果每个“ID”的“WK”只有一个“最大”值,我们可以使用 which.max或使用 arrange为每个“ID”按“WK”对数据集进行排序
  Data %>% 
group_by(ID) %>%
slice(which.max(WK))
# ID WK NumSuccess
#1 A 3 2
#2 B 3 1
#3 C 5 3

Data %>%
group_by(ID) %>%
arrange(-WK) %>%
slice(1)
data.table 中的类似方法是
library(data.table)
setDT(Data)[, .SD[max(WK)==WK], ID]
setDT(Data)[, .SD[which.max(WK)], ID]
setkey(setDT(Data), WK)[, .SD[.N], ID]

或者我们可以使用 ave来自 base R
 Data[with(Data, ave(WK, ID, FUN=max)==WK),]

关于R 子集 data.frame 从一个向量的最大值并按另一个分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29586382/

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