按顺序重新编号组

时间:2021-07-07 14:34:01

标签: r dplyr

我有一个 data.frame,其中包含与每个 ActivityID 相关的值,这些值按顺序编号但不是从 1 开始。这是因为我无法控制过滤发生。每个 ActivityID 包含相同 ActivityID 的重复以标记每个值。

例如df<-data.frame(value=runif(50), ActivityID=rep(c(10,18,19,20,34),each=10))

我想重新编号 ActivityID 以从 1 开始,以便所有结果看起来像:

df<-data.frame(value=runif(50), ActivityID=rep(seq(1:5),each=10))

请注意,每个声誉的数量可能会有所不同,因此有时可能是:ActivityID=rep(seq(1:2),each=25)

我尝试转换为因子并返回数字有效,但看起来很笨拙。有没有更简洁的方法?

data.frame(value=runif(25), ActivityID=as.factor(rep(c(10,18,19,20,34),each=5))) %>% mutate(ActivityID2=as.numeric(as.factor(ActivityID)))
        value ActivityID ActivityID2
1  0.17469577         10           1
2  0.74912473         10           1
3  0.47619071         10           1
4  0.65868345         10           1
5  0.46414206         10           1
6  0.95534408         18           2
7  0.05125897         18           2
8  0.72084512         18           2
9  0.13255307         18           2
10 0.34281137         18           2
11 0.82067045         19           3
12 0.08923745         19           3
13 0.47769767         19           3
14 0.11153303         19           3
15 0.98863208         19           3
16 0.03486372         20           4
17 0.37039246         20           4
18 0.01890895         20           4
19 0.58501266         20           4
20 0.10254404         20           4
21 0.78895076         34           5
22 0.85010741         34           5
23 0.37808120         34           5
24 0.70489555         34           5
25 0.83963100         34           5

2 个答案:

答案 0 :(得分:1)

您可以使用 cur_group_id()

library(dplyr)

df %>% 
  group_by(ActivityID) %>% 
  mutate(ActivityID2 = cur_group_id()) 

答案 1 :(得分:1)

您也可以使用 dplyr::dense_rank()

library(dplyr, warn.conflicts = F)

data.frame(value=runif(25), ActivityID=as.factor(rep(c(10,18,19,20,34),each=5))) %>% 
  mutate(ID2 = dense_rank(ActivityID))
#>         value ActivityID ID2
#> 1  0.04445442         10   1
#> 2  0.07533451         10   1
#> 3  0.46675858         10   1
#> 4  0.35555307         10   1
#> 5  0.99833030         10   1
#> 6  0.48128773         18   2
#> 7  0.51598496         18   2
#> 8  0.10621133         18   2
#> 9  0.18349920         18   2
#> 10 0.29088374         18   2
#> 11 0.03232032         19   3
#> 12 0.56884196         19   3
#> 13 0.56391102         19   3
#> 14 0.68882695         19   3
#> 15 0.44887127         19   3
#> 16 0.53528115         20   4
#> 17 0.67460873         20   4
#> 18 0.75139184         20   4
#> 19 0.66499921         20   4
#> 20 0.98203906         20   4
#> 21 0.46494209         34   5
#> 22 0.34140739         34   5
#> 23 0.99652580         34   5
#> 24 0.31101698         34   5
#> 25 0.84440767         34   5

reprex package (v2.0.0) 于 2021 年 7 月 7 日创建