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

如何在R中展开数据框CodeRange列的向量型值并新增列?

在R中展开代码范围为单个代码的实现方法

嘿,这事儿不难搞定!我来给你一步步演示怎么把CodeRange里的范围值展开成单个Codes,同时保留对应的Desc信息。

首先,咱们先模拟一下你提到的样例数据框:

library(tibble)
# 构造示例数据
df <- tibble(
  CodeRange = c("61000:61055", "0356T:0358T", "99201:99203"),
  Desc = c("内科相关代码", "影像技术代码", "门诊就诊代码")
)

接下来,我们需要写一个小函数来处理不同类型的范围——不管是纯数字范围,还是像0356T:0358T这种带后缀字母的代码范围:

expand_code_range <- function(range_str) {
  # 把范围字符串按冒号分割成起始和结束值
  range_parts <- strsplit(range_str, ":")[[1]]
  start_val <- range_parts[1]
  end_val <- range_parts[2]
  
  # 先判断是不是纯数字范围
  if (grepl("^\\d+$", start_val) && grepl("^\\d+$", end_val)) {
    # 纯数字的话,直接生成连续序列再转成字符
    as.character(seq(as.integer(start_val), as.integer(end_val), by = 1))
  } else {
    # 带字母的情况:提取数字部分和字母后缀
    start_num <- as.integer(gsub("[^0-9]", "", start_val))
    end_num <- as.integer(gsub("[^0-9]", "", end_val))
    code_suffix <- gsub("[0-9]", "", start_val) # 假设前后后缀一致
    # 生成数字序列后拼接字母
    paste0(seq(start_num, end_num, by = 1), code_suffix)
  }
}

有了这个函数,咱们就可以用tidyverse工具链来展开数据了:

library(dplyr)
library(tidyr)
library(purrr)

# 展开范围并生成最终数据框
df_expanded <- df %>%
  mutate(Codes = map(CodeRange, expand_code_range)) %>% # 把每个范围转成单个代码的列表
  unnest(Codes) # 把列表展开成多行

运行完之后,你就能得到期望的结果啦!比如61000:61055会被展开成从61000到61055的每一个数字,0356T:0358T会变成0356T、0357T、0358T,每个代码都对应原来的Desc。

如果你的数据里还有其他特殊格式的范围(比如前缀字母不同),可以稍微调整expand_code_range函数的逻辑,但这个版本已经能覆盖你提到的典型场景啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:38:43