如何在R中将成本中心范围字符串拆分为独立的单个取值
R实现成本中心范围字符串拆分展开的方法
你可以用tidyverse系列包完成该需求,核心逻辑是拆分范围、分离字母前缀与数字序号、生成连续序列后拼接、最后展开行,以下是可直接运行的完整代码:
第一步:加载依赖与构造示例数据
library(tidyverse) # 示例数据和你的业务场景一致,你可以替换为自己的DataFrame df <- tibble( cost_range = c("A6652 - A6670", "B2001 - B2005", "C1230 - C1232") )
第二步:核心处理逻辑
df_result <- df %>% # 拆分范围字符串为起始值、结束值两列 separate(cost_range, into = c("start", "end"), sep = "\\s*-\\s*", remove = FALSE) %>% # 提取公共字母前缀、起止值的数字部分 mutate( prefix = str_extract(start, "^[A-Za-z]+"), start_num = as.integer(str_extract(start, "\\d+$")), end_num = as.integer(str_extract(end, "\\d+$")) ) %>% # 生成当前范围对应的所有成本中心序列 mutate(cost_centre = map2(start_num, end_num, ~ paste0(prefix, seq(.x, .y)))) %>% # 把列表格式的序列展开为单行单个成本中心 unnest(cost_centre) %>% # 保留需要的列,可按需调整顺序 select(cost_range, cost_centre)
特殊场景适配
如果你的成本中心数字部分需要固定长度补零(比如始终保持4位数字,不足的左侧补0),把生成序列的代码修改为以下格式即可:
mutate(cost_centre = map2(start_num, end_num, ~ paste0(prefix, str_pad(seq(.x, .y), width = 4, side = "left", pad = "0"))))
如果前缀包含特殊字符,调整str_extract中的正则规则匹配你的业务格式即可。
内容的提问来源于stack exchange,提问作者genghiskhan
相关产品推荐
相关产品推荐

