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

如何使用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():将因子转为对应的整数ID
  • paste0():拼接前缀生成最终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():为每个分组分配递增的整数ID
  • ungroup():取消分组,恢复数据框原有结构

最终输出

两种方法均可得到你预期的结果:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:42:36