R语言中如何基于包含关系的NDC编码实现表连接?
解决NDC编码末尾带额外数字的表连接问题
针对你遇到的NDC编码末尾数字不一致导致连接失败的问题,这里有几种实用的解决方法:
方法1:截取固定长度的基础编码
如果基础NDC编码是固定长度(比如例子里的8位),直接截取表1编码的对应长度即可:
# 给表1添加基础编码列,截取前8位 ndcnum$ndc_base <- substr(ndcnum$ncdnum, 1, 8) # 表2的编码已经是基础格式,直接复用或统一列名 ndccodes$ndc_base <- ndccodes$new_NDC_Product # 基于处理后的列做左连接 TopNDCCodes <- left_join(ndcnum, ndccodes, by = "ndc_base")
方法2:移除末尾所有额外数字
如果额外数字的位数不固定,用正则表达式去掉编码末尾的所有数字:
library(stringr) # 移除表1编码末尾的数字序列 ndcnum$ndc_base <- str_remove(ndcnum$ncdnum, "\\d+$") # 用处理后的基础编码和表2连接 TopNDCCodes <- left_join(ndcnum, ndccodes, by = c("ndc_base" = "new_NDC_Product"))
方法3:模糊匹配前缀
如果需要更灵活的匹配逻辑(比如表2编码是表1编码的前缀),可以用fuzzyjoin包实现:
library(fuzzyjoin) # 匹配规则:表1的编码以表2的编码开头 TopNDCCodes <- fuzzy_left_join( ndcnum, ndccodes, by = c("ncdnum" = "new_NDC_Product"), match_fun = function(x, y) str_starts(x, y) )
注意事项
- 提前检查数据:确认所有基础编码的格式统一,避免因个别异常编码导致匹配错误
- 测试正则规则:如果用方法2,要确保正则
\\d+$能准确匹配你数据里的额外数字,不会误删有效编码部分
内容的提问来源于stack exchange,提问作者sebastian.mendoza
相关产品推荐
相关产品推荐

