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

R语言中识别列内匹配字符串并生成对应编号新列的方法

解决方案

当然可以!在R里有多种简洁高效的方法能实现这个需求——给每个唯一的description值分配对应的唯一编号,哪怕你的数据里有大量唯一值也完全没问题。下面是几个常用的方案,结合你的示例数据演示:

首先先构造你的示例tibble:

library(tibble)
library(dplyr)

# 你的示例数据
df <- tibble(
  block = c(1,1,1,1,1,2,2),
  description = c("enroll", "enroll", "motivated", "motivated", "motivated", "openemail", "openemail")
)

方法1:利用因子转整数(最直观)

通过将description转为因子,再把因子的水平转为整数,就能快速得到唯一编号:

df <- df %>%
  mutate(desc_id = as.integer(factor(description, levels = unique(description))))
  • 这里levels = unique(description)确保编号按照description首次出现的顺序生成;如果不需要这个顺序,去掉该参数即可,默认会按字母顺序分配编号。

方法2:分组后获取组ID(tidyverse风格)

用dplyr的分组功能,直接为每个分组分配唯一ID:

df <- df %>%
  group_by(description) %>%
  mutate(desc_id = cur_group_id()) %>%
  ungroup()

这个方法代码更语义化,分组后每个description组对应一个唯一ID,顺序和分组的顺序一致。

方法3:Base R原生方法(无需加载包)

如果不想加载额外包,用match()函数就能实现:

df$desc_id <- match(df$description, unique(df$description))

match()会返回每个description元素在unique(df$description)向量中的位置,也就是对应的唯一编号,效率很高。

最终结果示例

执行上述任意方法后,你的tibble会变成这样:

df
#> # A tibble: 7 × 3
#>   block description desc_id
#>   <dbl> <chr>         <int>
#> 1     1 enroll            1
#> 2     1 enroll            1
#> 3     1 motivated         2
#> 4     1 motivated         2
#> 5     1 motivated         2
#> 6     2 openemail         3
#> 7     2 openemail         3

额外需求:自定义编号映射

如果需要给特定的description分配自定义编号(比如不是从1开始的连续数),可以先创建一个映射表,再通过左连接实现:

# 创建自定义映射表
desc_mapping <- tibble(
  description = c("enroll", "motivated", "openemail"),
  desc_id = c(101, 202, 303) # 自定义编号
)

# 左连接完成映射
df <- df %>%
  left_join(desc_mapping, by = "description")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:38:51