如何将重复emp_id替换为P1、P2格式的唯一标识?
解决R语言数据框重复emp_id转为P1/P2格式的问题
原始数据
首先是你创建的包含重复emp_id的数据框:
# 创建数据框 mydataframe <- data.frame( emp_id = c(100,101,100,200,150,200,600,100,150,600), value = c(5,3,2,1,6,7,8,3,2,1) ) # 打印数据框 print(mydataframe)
需求
将重复的emp_id映射为P1、P2这类带前缀的唯一标识(如100对应P1、200对应P2),你已尝试的dplyr代码仅能生成数字标识,无法得到目标格式。
你尝试过的代码
# 尝试1:用factor转数字 mydataframe %>% mutate(emp_id = as.integer(factor(emp_id, levels = unique(emp_id)))) # 尝试2:用match匹配唯一值位置 mydataframe %>% mutate(emp_id = match(emp_id, unique(emp_id))) # 尝试3:用分组ID生成数字 library(dplyr) mydataframe %>% group_by(emp_id = factor(emp_id, levels = unique(emp_id))) %>% mutate(emp_id = cur_group_id())
解决方案
以下两种方法均可实现需求,且保留原始emp_id列:
方法1:借助factor生成带前缀标识
直接通过factor将emp_id转为顺序数字,再用paste0拼接前缀"P":
library(dplyr) result <- mydataframe %>% mutate( ID = paste0("P", as.integer(factor(emp_id, levels = unique(emp_id)))) ) print(result)
方法2:分组+cur_group_id生成标识
通过分组获取唯一ID,再拼接前缀,若需严格按照emp_id首次出现的顺序分配标识,可先指定分组顺序:
library(dplyr) result <- mydataframe %>% # 按emp_id首次出现的顺序创建分组因子 mutate(emp_order = factor(emp_id, levels = unique(emp_id))) %>% group_by(emp_order) %>% mutate(ID = paste0("P", cur_group_id())) %>% ungroup() %>% select(-emp_order) # 移除临时分组列 print(result)
期望输出结果
运行上述代码后,会得到如下格式的结果:
emp_id ID value 1 100 P1 5 2 101 P2 3 3 100 P1 2 4 200 P3 1 5 150 P4 6 6 200 P3 7 7 600 P5 8 8 100 P1 3 9 150 P4 2 10 600 P5 1
内容的提问来源于stack exchange,提问作者cat cat
相关产品推荐
相关产品推荐

