You need to enable JavaScript to run this app. R语言如何基于gender列生成带21段、分性别重置的唯一标识符
优惠活动
大模型
产品
解决方案
定价
更多

R语言如何基于gender列生成带21段、分性别重置的唯一标识符

生成规则匹配的唯一标识符列

规则对齐说明

结合给出的示例输出,实际计数逻辑为:按gender的取值分组,每个gender类别从0001开始按行出现顺序累计计数,不因中途插入其他gender值重置序号,最终拼接为「gender取值 + 固定值21 + 4位补零顺序号」的格式。
如果按照相邻行gender变化就重置序号的逻辑,示例中第6行的F类数据会重新从0001开始编号,和给定输出F210004不匹配,这点需要注意区分。

方案1:dplyr 实现

适配5000行规模的结构化数据处理,代码可读性高:

library(dplyr)

df <- df %>%
  group_by(gender) %>%
  mutate(id = paste0(gender, "21", sprintf("%04d", row_number()))) %>%
  ungroup()

代码逻辑:

  • group_by(gender)按gender值拆分数据组
  • row_number()在每个组内按原始行顺序生成从1开始的连续序号
  • sprintf("%04d", ...)将序号补零为4位长度(如1转成0001)
  • 拼接完成后用ungroup()解除分组状态,避免影响后续分析

方案2:Base R 原生实现

无需加载额外包,适配轻量化场景:

df$id <- paste0(
  df$gender,
  "21",
  sprintf("%04d", ave(seq_len(nrow(df)), df$gender, FUN = seq_along))
)

代码逻辑:

  • ave()函数按gender分组,为每组生成从1开始的连续序号
  • 后续拼接、补零逻辑和dplyr方案完全一致

输出验证

以上两个方案生成的结果和给出的期望输出完全一致:

namegenderid
AFF210001
BFF210002
CFF210003
DMM210001
EMM210002
FFF210004
GMM210003
HFF210005
IFF210006

内容的提问来源于stack exchange,提问作者L R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 01:45:03