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

R语言特定条件下数值ID还原为原始字符ID的实现方法咨询

实现思路

你可以按以下逻辑处理:

  • 首先拆分id列的内容,提取两部分:前两位的前缀部分、最后1位的后缀数字
  • 判断前缀是否属于指定的items = c(12,13,15)集合:
    • 属于该集合的,将末尾的1/2/3分别替换为_B/_C/_D,再和前缀拼接成原始字符格式id
    • 不属于该集合的,直接保留原始id值即可
  • 其余列保持不变,输出最终数据集
代码实现

方法1:tidyverse 实现(代码简洁易读)

library(tidyverse)

items <- c(12,13,15)
# 后缀映射表
suffix_map <- c("1" = "_B", "2" = "_C", "3" = "_D")

df.3 <- df.2 %>%
  mutate(
    # 提取前两位前缀
    prefix = str_extract(id, "^\\d{2}"),
    # 提取末尾1位
    last_digit = str_sub(id, -1),
    # 按规则重构id
    id = case_when(
      prefix %in% as.character(items) & last_digit %in% names(suffix_map) ~ paste0(prefix, suffix_map[last_digit]),
      TRUE ~ id
    )
  ) %>%
  # 删除中间辅助列
  select(-prefix, -last_digit)

方法2:base R 实现(无需额外加载依赖包)

items <- c(12,13,15)
suffix_map <- c("1" = "_B", "2" = "_C", "3" = "_D")

df.3 <- df.2
for (i in seq_len(nrow(df.3))) {
  id_val <- df.3$id[i]
  prefix <- substr(id_val, 1, 2)
  last_digit <- substr(id_val, nchar(id_val), nchar(id_val))
  if (prefix %in% as.character(items) && last_digit %in% names(suffix_map)) {
    df.3$id[i] <- paste0(prefix, suffix_map[last_digit])
  }
}

两种方法运行后得到的df.3都和你给出的预期结果完全一致,且兼容后续出现15前缀的id场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:36:00