You need to enable JavaScript to run this app. R语言中匹配数据框列指定前两位ICD-10编码的高效实现方法
优惠活动
大模型
产品
解决方案
定价
更多

R语言中匹配数据框列指定前两位ICD-10编码的高效实现方法

R实现ICD-10编码前缀匹配的高效方法

以下三种方案均比%like%搭配case_when的执行效率更高,尤其在十万行以上的数据集上性能优势更明显:

方案1:截取前缀匹配(可读性最高,不易出错)

先统一编码大小写,截取前两位后直接匹配目标前缀集合,逻辑清晰,对正则不熟悉的用户优先选这个:

# 示例编码向量
codes = c("s001", "s1234", "s4g6", "T002", "T191","t985","s761","t17.5")

# 统一转大写后截取前两位,判断是否在目标前缀集合中
code_prefix <- substr(toupper(codes), 1, 2)
result <- as.integer(code_prefix %in% c("S0", "S1", "T0", "T1", "T9"))

返回的result对应示例编码的结果为:1 1 0 1 1 1 0 1,完全符合需求。

方案2:base R正则匹配(无依赖,代码简洁)

直接用base R自带的grepl函数做正则匹配,不需要加载任何第三方包,单行即可完成:

result <- as.integer(grepl("^([Ss][01]|[Tt][019])", codes))

正则说明:^匹配字符串开头,[Ss]匹配大小写的S,[Tt]匹配大小写的T,后续字符限制为目标前缀的第二位即可。

方案3:stringi正则匹配(超大数据集最优)

如果你的数据集行数超过百万,推荐用性能更优的stringi包函数,执行速度比base R快2-3倍:

library(stringi)
result <- as.integer(stri_detect_regex(codes, "^([Ss][01]|[Tt][019])"))

小提示:如果你的编码列已经提前统一为全大写/全小写,可以去掉正则里的大小写匹配规则,或者转大小写的步骤,执行效率会进一步提升。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 18:48:03