R语言按优先级合并多列受伤数据生成严重度因子变量的实现方法
R语言实现患者受伤严重度分级
实现逻辑
我们按照严重度从高到低的优先级依次判断:只要患者存在高等级的任意一种伤害,就直接赋值对应等级,不再判断更低等级的伤害,完全匹配需求的优先级规则。
方法1:使用dplyr包的case_when(可读性更高)
首先加载dplyr包,然后用case_when按优先级编写判断条件即可,注意列名含空格的需要用反引号包裹:
# 加载依赖包 library(dplyr) # 生成Severity变量 df <- df %>% mutate(Severity = case_when( # 1级(最严重)判断条件 `Car Accident` == 1 | Shot == 1 | ShotBow == 1 ~ 1, # 2级(中等严重)判断条件 Stab == 1 | Cut == 1 | `Bicycle Accident` == 1 ~ 2, # 3级(轻微)判断条件 Punched == 1 | Slapped == 1 | FellOver == 1 ~ 3, # 可选配置:无任何伤害的情况赋值为NA TRUE ~ NA_integer_ ))
方法2:Base R原生实现(无需加载额外包)
用嵌套的ifelse实现,判断顺序同样按优先级从高到低:
df$Severity <- ifelse( df$`Car Accident` == 1 | df$Shot ==1 | df$ShotBow ==1, 1, ifelse( df$Stab ==1 | df$Cut ==1 | df$`Bicycle Accident` ==1, 2, 3 ) ) # 若需要处理无任何伤害的情况,可将最内层的3替换为ifelse(3级伤害判断条件, 3, NA)
结果验证
运行后示例患者的分级结果完全符合要求:
- 患者1:仅Stab=1,Severity=2
- 患者8:Cut=1、Punched=1,优先取2级,Severity=2
- 患者10:Shot=1、Cut=1,优先取1级,Severity=1
内容的提问来源于stack exchange,提问作者Joe Crozier
相关产品推荐
相关产品推荐

