如何使用dplyr为R数据框中唯一数字添加对应ID列?
为数据框的唯一数字分配专属ID(dplyr实现)
完全可以用dplyr的mutate函数实现需求,以下提供两种常用方法,同时解决你数据中前导0丢失的问题:
先修正原始数据(保留前导0)
因为直接用数值型存储的话,039203会自动转为39203丢失前导0,所以需要将number列设为字符型:
library(dplyr) df <- data.frame( number = as.character(c(111110, 111211, 111311, 111411, 111110, 111311, 930920, "039203", 940291, 111110)), value = seq(1,10,1) )
方法1:利用因子类型转换
通过将number转为因子,提取因子对应的整数索引,再拼接ID-前缀:
df <- df %>% mutate(ID = paste0("ID-", as.integer(factor(number, levels = unique(number)))))
factor(number, levels = unique(number)):按number首次出现的顺序创建因子水平as.integer():将因子转为对应的整数IDpaste0():拼接前缀生成最终ID格式
方法2:利用分组与cur_group_id()
通过group_by按唯一number分组,再用cur_group_id()生成组ID:
df <- df %>% group_by(number) %>% mutate(ID = paste0("ID-", cur_group_id())) %>% ungroup()
group_by(number):按唯一数字分组cur_group_id():为每个分组分配递增的整数IDungroup():取消分组,恢复数据框原有结构
最终输出
两种方法均可得到你预期的结果:
df # number value ID # 1 111110 1 ID-1 # 2 111211 2 ID-2 # 3 111311 3 ID-3 # 4 111411 4 ID-4 # 5 111110 5 ID-1 # 6 111311 6 ID-3 # 7 930920 7 ID-5 # 8 039203 8 ID-6 # 9 940291 9 ID-7 #10 111110 10 ID-1
内容的提问来源于stack exchange,提问作者user213544
相关产品推荐
相关产品推荐

