如何使用dplyr为数据框列的每个唯一值按顺序生成编号标签
需求说明
给数据框指定列的每个唯一值,按照首次出现的顺序生成连续的编号标签,示例如下:
输入数据框:
df x 1 A 2 A 3 B 4 C 5 C 6 D
期望输出:
df x event 1 A 1 2 A 1 3 B 2 4 C 3 5 C 3 6 D 4
已有的循环实现逻辑:
events <- unique(df$x) for(i in 1:length(events)){ df$event[df$x == events[i]] <- i }
dplyr实现方案
你可以直接用dplyr的cur_group_id()函数实现,和你原有循环的逻辑完全一致,编号顺序严格匹配唯一值首次出现的顺序:
library(dplyr) df <- df %>% group_by(x) %>% mutate(event = cur_group_id()) %>% ungroup()
如果你的场景允许编号按照列值的字典序排序,也可以用更简洁的dense_rank()写法:
df <- df %>% mutate(event = dense_rank(x))
内容的提问来源于stack exchange,提问作者Levente
相关产品推荐
相关产品推荐

