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

如何为另一列取值相同的行分配统一唯一编码(R语言数据处理)

R语言为重复值列分配唯一分组编码方案

方法1:基础R实现

无需额外安装依赖包,直接用内置函数即可实现需求:

# 原示例数据,先转为数据框更方便处理
ID <- c("A", "B", "C", "D", "E")
Dose <- c("1", "5", "3", "4", "5")
Value <- c("x1", "x2", "x3", "x2", "x3")
df <- data.frame(ID, Dose, Value)

# 按Value第一次出现的顺序分配唯一Code,与你预期输出逻辑完全一致
df$Code <- as.integer(factor(df$Value, levels = unique(df$Value)))

如果不需要按出现顺序、希望按Value的字典序分配编码,直接去掉levels参数即可:df$Code <- as.integer(factor(df$Value))

方法2:tidyverse(dplyr)实现

如果常用tidyverse生态,用分组ID函数逻辑更直观:

library(dplyr)
df <- df %>%
  # 按Value列分组
  group_by(Value) %>%
  # 为每个分组分配唯一id
  mutate(Code = cur_group_id()) %>%
  ungroup()

如果需要按Value第一次出现的顺序分配编码,添加一行因子顺序调整代码即可:

library(dplyr)
library(forcats)
df <- df %>%
  mutate(Value = fct_inorder(Value)) %>%
  group_by(Value) %>%
  mutate(Code = cur_group_id()) %>%
  ungroup()

补充说明

  • 两种方案处理数十万行级别的数据集都没有性能问题,完全适配你数千行数百列的数据集需求
  • 如果需要Code不是纯数字、而是带自定义前缀的唯一值,只需要把生成的Code拼接前缀即可,比如df$Code = paste0("GROUP_", df$Code)

内容的提问来源于stack exchange,提问作者Gabriel Metegnier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:57:02