You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将重复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 15:05:30