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

data.table列中协调关税码去重自定义函数开发咨询

我来帮你完善这个去除重复HS编码的函数,刚好data.table和字符串处理这块我熟得很!先给你补全并优化后的函数,还加了边界情况的处理,避免遇到奇怪的输入报错:

unique_hscodes <- function(hs_input) {
  # 处理NA输入,直接返回NA
  if (is.na(hs_input)) {
    return(NA_character_)
  }
  
  # 按"; "分割字符串(匹配你的分隔格式)
  hs_split <- strsplit(hs_input, split = "; ")[[1]]
  
  # 去除每个编码前后的空白(防止输入有多余空格)
  hs_trimmed <- trimws(hs_split)
  
  # 去重后重新拼接成字符串
  hs_unique <- unique(hs_trimmed)
  
  # 处理空值情况,避免返回空字符串
  if (length(hs_unique) == 0) {
    return(NA_character_)
  } else {
    paste(hs_unique, collapse = "; ")
  }
}

函数逻辑说明:

  • 先检查输入是不是NA,避免后续操作报错;
  • 用strsplit按你数据里的; 分隔符拆分编码;
  • 用trimws清理每个编码前后可能存在的多余空格(比如有的输入可能是" 7601.00 ; 7601.00 "这种不规范格式);
  • 用unique()去重,最后再把编码用; 拼接回去;
  • 额外处理了拆分后为空的极端情况,返回NA而不是空字符串,更符合数据规范。

在data.table里的使用示例:

假设你的数据集叫dt,存HS编码的列叫hs_codes,直接用data.table的语法批量处理就行:

library(data.table)

# 先造点示例数据模拟你的场景
dt <- data.table(
  hs_codes = c(
    "7601.00; 7601.00",
    "7601.00; 8800.00",
    NA,
    "9001.10; 9001.10; 9002.00",
    "  8517.12 ; 8517.12  "
  )
)

# 生成清洗后的列
dt[, hs_codes_clean := unique_hscodes(hs_codes)]

# 查看结果
print(dt)

运行后得到的结果会是:

hs_codes    hs_codes_clean
1:      7601.00; 7601.00           7601.00
2:      7601.00; 8800.00 7601.00; 8800.00
3:                    NA                NA
4: 9001.10; 9001.10; 9002.00 9001.10; 9002.00
5:   8517.12 ; 8517.12             8517.12

等你之后确定了多编码的处理规则(比如只保留第一个、合并成其他格式),直接在这个函数里修改最后拼接的逻辑就行,现在这个版本完全满足你先去重的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:12:43