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

R语言如何按行将字符串转为向量 实现诊断编码逐行匹配

问题原因

之前的处理思路存在两个核心问题:

  • 直接对整列discharge_codes调用str_split()后接flatten_chr(),会把所有行拆分出的诊断编码全部合并成一个全局字符向量,完全丢失行与行的患者对应关系,自然无法实现逐患者匹配。
  • 用rowwise()按行处理时报错,是因为str_split()处理单行字符串时,输出本身就是拆分完成的字符向量(嵌套在长度为1的列表元素里),而flatten_chr()要求输入必须是多层嵌套的列表结构,传入字符向量就会触发.x must be a list, not a character vector的类型错误。
简便实现方案

不需要复杂的扁平化操作,两种常用写法都可以快速实现需求:

方法1:正则精确匹配(代码最简洁)

不需要拆分字符串,直接构造精确匹配的正则规则即可,必须加起止和分隔符边界判断,避免短编码被长编码误判(比如编码"A"误匹配到"AB"):

library(tidyverse)
mre %>% 
  mutate(
    is_code_exist = str_detect(discharge_codes, paste0("(^|_)", follow_up_code, "(_|$)"))
  )

运行结果对应示例数据:

  • 患者1234:随访编码A存在于出院编码A_B_C中,返回TRUE
  • 患者4567:随访编码C不存在于出院编码D_E_F中,返回FALSE
  • 患者7890:随访编码E存在于出院编码A_C_E中,返回TRUE

方法2:逐行拆分判断(逻辑最直观)

如果不想写正则,可以利用str_split()输出的列表列结构,用map2_lgl()逐行做成员判断,不会出现全局扁平化的问题:

mre %>%
  mutate(
    is_code_exist = map2_lgl(
      discharge_codes, follow_up_code,
      ~ .y %in% str_split(.x, "_")[[1]]
    )
  )

之前的rowwise()写法其实只需要去掉多余的flatten_chr()调用就能正常运行,不需要额外做格式转换:

mre %>%
  rowwise() %>%
  mutate(is_code_exist = follow_up_code %in% str_split(discharge_codes, "_")[[1]]) %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:36:35