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

如何动态展开NAICS代码的范围字符串为逗号分隔格式?

优雅实现NAICS代码范围的展开

需要将包含单个代码、逗号分隔代码和范围格式(如31-33、6114-7)的NAICS列,统一转换为全逗号分隔的展开字符串,以下是简洁易维护的实现方案:

实现代码

library(tidyverse)

# 定义单个NAICS范围项的展开函数
expand_naics_range <- function(x) {
  # 非范围项直接返回
  if (!stringr::str_detect(x, "-")) return(x)
  
  # 拆分范围的起始和后缀部分
  parts <- stringr::str_split(x, "-", simplify = TRUE)
  start_str <- parts[1]
  end_suffix <- parts[2]
  
  # 计算完整的结束代码
  start_len <- nchar(start_str)
  suffix_len <- nchar(end_suffix)
  end_str <- if (suffix_len < start_len) {
    stringr::str_c(stringr::str_sub(start_str, 1, start_len - suffix_len), end_suffix)
  } else {
    end_suffix
  }
  
  # 生成序列并格式化为与起始代码同长度的字符串(保留前导零)
  seq_num <- seq(as.integer(start_str), as.integer(end_str))
  stringr::str_pad(seq_num, width = start_len, pad = "0", side = "left")
}

# 样本数据
data0 <- tibble::tibble("2022 NAICS" = c("31-33", "331", "332, 333", "6113", "6114-7", "6118"))

# 执行展开处理
data_expanded <- data0 %>%
  dplyr::mutate(
    `Expanded NAICS` = purrr::map_chr(`2022 NAICS`, function(x) {
      # 拆分逗号分隔的多个项
      items <- stringr::str_split(x, ",\\s+")[[1]]
      # 逐个展开后合并为字符串
      items %>%
        purrr::map(expand_naics_range) %>%
        unlist() %>%
        stringr::str_c(collapse = ", ")
    })
  )

# 查看结果
print(data_expanded)

代码说明

  • expand_naics_range函数:专门处理单个范围项,自动适配不同位数的范围规则:
    • 对于6114-7这类短后缀范围,提取起始代码的前缀(611)拼接后缀(7)得到结束代码6117,生成序列后补全位数
    • 对于31-33这类等长范围,直接用起始和结束代码生成序列
    • 保留NAICS代码的前导零格式(如04-06会展开为04, 05, 06)
  • tidyverse链式处理:用map_chr迭代每个单元格,拆分逗号项、逐个展开后合并,逻辑清晰易维护

输出结果

# A tibble: 6 × 2
  `2022 NAICS` `Expanded NAICS`       
  <chr>        <chr>                  
1 31-33        31, 32, 33             
2 331          331                    
3 332, 333     332, 333               
4 6113         6113                   
5 6114-7       6114, 6115, 6116, 6117 
6 6118         6118                   

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:36:38