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

如何基于BurnData的部位指示变量创建复合分类指示变量?

合并BurnData中部位指示变量的解决方案

我来帮你搞定这个变量合并的问题!用dplyr完全可以实现你的需求,我给你写一段清晰的代码,还会拆解每一步的逻辑:

完整代码实现

library(dplyr)

# 先定义需要合并的部位变量列表,方便后续维护修改
site_variables <- c("head", "buttock", "trunk", "upper leg", "lower leg", "respiratory tract")

# 生成新的指示变量
BurnData <- BurnData %>%
  mutate(
    # 计算每个观测中部位变量的1的总数,用来判断是全0、单个1还是组合情况
    site_total = rowSums(across(all_of(site_variables))),
    # 按照你的规则匹配生成新变量site_group
    site_group = case_when(
      # 所有部位均为0
      site_total == 0 ~ 0,
      # 仅head为1
      site_total == 1 & head == 1 ~ 1,
      # 仅buttock为1
      site_total == 1 & buttock == 1 ~ 2,
      # 仅trunk为1
      site_total == 1 & trunk == 1 ~ 3,
      # 仅upper leg为1
      site_total == 1 & `upper leg` == 1 ~ 4,
      # 仅lower leg为1
      site_total == 1 & `lower leg` == 1 ~ 5,
      # 仅respiratory tract为1(如果你原本想对应7,直接把数字改成7就行)
      site_total == 1 & `respiratory tract` == 1 ~ 6,
      # 存在任意组合的情况
      site_total > 1 ~ 8
    )
    # 要是不需要中间变量site_total,就在这里加 %>% select(-site_total) 删掉它
  )

代码逻辑拆解

  1. 统一管理变量:用site_variables把要处理的部位变量列在一起,后续如果要调整变量范围,只需要修改这个列表,不用动后面的计算逻辑,更灵活。
  2. 判断变量类型:rowSums(across(all_of(site_variables)))会逐行统计这些部位变量里1的数量,帮我们快速区分三种情况:全0、单个1、多个1。
  3. 规则匹配赋值:case_when是dplyr里处理多条件判断的神器,我们严格按照你给定的规则逐一匹配:
    • 总和为0时,新变量设为0;
    • 总和为1且对应部位为1时,匹配对应的编码;
    • 总和大于1时,直接设为8(对应任意组合的情况)。

你的样本数据测试结果

用你提供的前6行数据运行代码,得到的site_group结果如下:

  • 第1行:部位变量总和为2 → 8
  • 第2行:仅trunk为1 → 3
  • 第3行:部位变量总和为2 → 8
  • 第4行:部位变量总和为2 → 8
  • 第5行:部位变量总和为4 → 8
  • 第6行:部位变量总和为2 → 8

完全符合你的规则要求!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:22:25