基于ICD-10标准的MDI抑郁严重程度R代码优化问询
基于ICD-10标准的MDI抑郁严重程度判定(tidy风格实现)
核心思路
先对量表中需取最高分的条目(mdi_8a/b、mdi_10a/b)做合并处理,再分别统计核心标准、次要标准的达标项数,最后用case_when结合统计结果判定抑郁严重程度——这种写法逻辑清晰,且能轻松扩展中度、重度等其他类别的判定规则。
完整代码实现
library(tidyverse) # 示例数据(替换为你的真实数据集) set.seed(123) mdi_data <- tibble( id = 1:10, mdi_1 = sample(1:5, 10, replace = TRUE), mdi_2 = sample(1:5, 10, replace = TRUE), mdi_3 = sample(1:5, 10, replace = TRUE), mdi_4 = sample(1:5, 10, replace = TRUE), mdi_5 = sample(1:5, 10, replace = TRUE), mdi_6 = sample(1:5, 10, replace = TRUE), mdi_7 = sample(1:5, 10, replace = TRUE), mdi_8a = sample(1:5, 10, replace = TRUE), mdi_8b = sample(1:5, 10, replace = TRUE), mdi_9 = sample(1:5, 10, replace = TRUE), mdi_10a = sample(1:5, 10, replace = TRUE), mdi_10b = sample(1:5, 10, replace = TRUE) ) # 数据预处理 + 抑郁严重程度判定 mdi_data_with_severity <- mdi_data %>% # 合并需取最高分的条目:mdi_8、mdi_10 rowwise() %>% mutate( mdi_8 = max(mdi_8a, mdi_8b), mdi_10 = max(mdi_10a, mdi_10b) ) %>% ungroup() %>% # 统计核心标准(mdi_1-3)达标数(得分≥4) mutate( core_meet = rowSums(across(mdi_1:mdi_3, ~.x >= 4)) ) %>% # 统计次要标准达标数(处理后的7项:mdi_4-7、mdi_8、mdi_9、mdi_10,得分≥3) mutate( secondary_meet = rowSums(across(c(mdi_4:mdi_7, mdi_8, mdi_9, mdi_10), ~.x >= 3)) ) %>% # 判定抑郁严重程度(此处先实现轻度,可扩展其他类别) mutate( depression_severity = case_when( core_meet >= 2 & between(secondary_meet, 2, 3) ~ "轻度抑郁", # 可在此添加中度、重度等其他ICD-10判定规则 TRUE ~ "无抑郁/未达轻度标准" ) ) # 查看结果 glimpse(mdi_data_with_severity)
代码说明
- 条目合并:用
rowwise()+max()处理mdi_8和mdi_10的子条目,确保取每个被试的最高分,符合量表规则。 - 达标数统计:用
across()+rowSums()批量计算核心/次要标准的达标项数,避免逐个枚举变量,代码更简洁易维护。 - 严重程度判定:
case_when的条件直接基于统计后的达标数,逻辑直观,后续添加中度(如核心≥2+次要≥4)、重度(核心≥3+次要≥5)等规则时,只需在case_when中新增分支即可。
内容的提问来源于stack exchange,提问作者Milena
相关产品推荐
相关产品推荐

