R语言宽表转换问题:并发症标记错误与多并发症记录缺失
修正医疗并发症数据集转宽表的R代码
首先定义贴合场景的模拟数据集:
# 模拟数据集 filtered_datum <- data.frame( record_id = c(1,1,2,3,3), surg_complication = c("SSI", "Hematoma", "SSI", "Hematoma", "SSI"), complication_laterality = c(1,2,3,1,3) )
原问题根源
- 并发症标记错误:原代码未正确关联并发症类型与侧别,导致列名映射混乱
- 无法记录多种并发症:未做行拆分与聚合处理,导致同一患者的多并发症被覆盖
修正后的代码
library(tidyr) library(dplyr) # 第一步:处理双侧并发症,拆分数据行 processed_data <- filtered_datum %>% mutate( # 将侧别转为列表,双侧拆分为左右两个元素 laterality_list = case_when( complication_laterality == 1 ~ list("right"), complication_laterality == 2 ~ list("left"), complication_laterality == 3 ~ list(c("right", "left")) ) ) %>% # 展开列表,把双侧对应的单行拆为两行 unnest(laterality_list) %>% # 拼接目标列名:并发症类型+侧别 mutate(col_name = paste0(surg_complication, "_", laterality_list)) %>% # 标记该并发症存在 mutate(value = 1) # 第二步:转宽表,补全缺失并发症为0 Comp_summary_wide <- processed_data %>% pivot_wider( id_cols = record_id, names_from = col_name, values_from = value, values_fill = 0, # 处理同一患者同一并发症侧别重复的情况 values_fn = max )
输出结果验证
运行后Comp_summary_wide的内容:
record_id SSI_right Hematoma_left SSI_left Hematoma_right <dbl> <dbl> <dbl> <dbl> <dbl> 1 1 1 1 0 0 2 2 1 0 1 0 3 3 1 0 1 1
完全满足需求:
- 每个
record_id仅出现一行 - 并发症与侧别对应准确(如右侧SSI对应
SSI_right) - 双侧并发症同时标记左右侧为1
- 同一患者的多种并发症全部被记录
内容的提问来源于stack exchange,提问作者FindingtheWay
相关产品推荐
相关产品推荐

