gpt4 book ai didi

r - 在R中,如何按降序对多列数据进行分组,然后为每个组指定从1开始的索引?

转载 作者:行者123 更新时间:2023-12-02 02:48:51 29 4
gpt4 key购买 nike

我的数据如下:

a <- data.frame(a1=c(2,2,1,1,2,2,3,3),
a2=c(5,4,2,2,5,5,6,6),
a3=c(3,1,5,5,7,7,8,8))

然后,我对数据进行排序:

aa <- a %>% 
arrange(desc(a3),desc(a2),desc(a1))

数据如下:

> aa
a1 a2 a3
1 3 6 8
2 3 6 8
3 2 5 7
4 2 5 7
5 1 2 5
6 1 2 5
7 2 5 3
8 2 4 1

现在我需要按a3、a2和a1对数据进行分组。因此,在 aa 中,第 1 行和第 2 行将在一组中,第 3 行和第 4 行也将在一组中。现在我需要给每个组一个索引,从 1 开始。因此,数据应如下所示:

> aa
a1 a2 a3 Index
1 3 6 8 1
2 3 6 8 1
3 2 5 7 2
4 2 5 7 2
5 1 2 5 3
6 1 2 5 3
7 2 5 3 4
8 2 4 1 5

所以总而言之,我需要先将数据按降序排列,然后将其分组,然后为每个组指定从 1 开始的索引。有人可以帮我吗?

最佳答案

我们可能会使用group_indices,但这也会带来重新排序问题。相反,一个选项是在感兴趣的列上粘贴(或str_c - 来自stringr),然后匹配具有粘贴字符串的唯一

library(dplyr)
library(stringr)
aa %>%
mutate(Index = str_c(a1, a2, a3),
Index = match(Index, unique(Index)))

或者不要单独排列,而是将其与一起使用

library(tidyr)
a %>%
arrange(across(a1:a3, desc)) %>%
unite(Index, everything(), remove = FALSE) %>%
mutate(Index = match(Index, unique(Index)))

或者使用data.table中的.GRP

library(dplyr)
setDT(aa)[, Index := .GRP, .(a1, a2, a3)]
aa
# a1 a2 a3 Index
#1: 3 6 8 1
#2: 3 6 8 1
#3: 2 5 7 2
#4: 2 5 7 2
#5: 1 2 5 3
#6: 1 2 5 3
#7: 2 5 3 4
#8: 2 4 1 5

关于r - 在R中,如何按降序对多列数据进行分组,然后为每个组指定从1开始的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62399241/

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