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
相关产品推荐
相关产品推荐

