R语言如何使用dplyr::mutate拆分分隔字符串为多行并保留对应标识
问题场景
现有测试数据框结构如下:
df <- data.frame(quadrant = rep(2:3, each = 3, times = 1), ICD = c("S06|D11|A41|O34|O48", "R55|A08|K40", "N23|F13|K80|F19", "R13|C18", "E13|F19", "D11|A41|N23|K80"))
处理要求:对字符串格式的ICD列按分隔符|拆分,拆分后每个ICD编码单独占一行,同时保留对应行的quadrant字段值,核心拆分逻辑需通过dplyr::mutate实现。
实现方案
核心思路是先在mutate步骤中完成字符串拆分,将ICD列转换为存储拆分结果的列表列,再配合tidyr的行展开函数完成长表转换,属于dplyr生态标准操作流。
完整代码
# 加载依赖包 library(dplyr) library(tidyr) # 数据处理 df_res <- df %>% mutate(ICD = strsplit(ICD, split = "\\|")) %>% unnest_longer(ICD)
代码说明
mutate步骤调用基础R的strsplit函数完成字符串拆分:注意|是正则表达式特殊元字符,必须用双反斜杠转义为\\|才能被识别为普通分隔符,拆分后ICD列会被转换为列表类型,每个列表元素对应原行拆分得到的所有ICD编码unnest_longer步骤会把列表列按元素逐行展开,展开时自动复制对应行的其他字段(即quadrant值),最终得到每个ICD编码单独一行的结果
结果预览
处理后得到的数据框共20行,结构示例如下:
quadrant ICD 1 2 S06 2 2 D11 3 2 A41 4 2 O34 5 2 O48 6 2 R55 ...
内容的提问来源于stack exchange,提问作者mountain_view
相关产品推荐
相关产品推荐

