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

R语言实现基于用药哑变量组合调整hdl/ldl/trig指标

R实现用药相关血脂指标调整

直接按规则写即可,不需要做复杂的分支判断。

核心逻辑

你列出的两条调整规则可以合并为统一逻辑,不用单独判断观察对象的服药数量:对每个观察对象的hdl、ldl、trig三类血脂指标,分别选出该对象服用的所有药物对应调整常数中绝对值最大的项,和原始指标值做加法运算即可。单药场景下本身只有一个对应常数,天然符合该规则,能省掉多分支判断的冗余代码。

完整可运行代码

先运行你提供的模拟数据集生成代码,再接下面的计算逻辑即可,全程用基础R实现,不需要安装第三方依赖包:

# 定义各药物对应的三类血脂指标调整常数
med_adjust_map <- data.frame(
  med_name = c("med1", "med2", "med3", "med4", "med5"),
  hdl_delta = c(-3.5, -6.3, -5, 0, -2.1),
  ldl_delta = c(34.5, 24.7, 42.3, 23, 12),
  trig_delta = c(20.1, 0, 12, 22, 22.2)
)

# cbind生成的是矩阵对象,先转成data.frame方便后续列操作
data <- as.data.frame(data)

# 初始化三个调整后指标列
data[, c("adj_hdl", "adj_ldl", "adj_trig")] <- NA

# 逐行计算调整后指标值
for (row_idx in 1:nrow(data)) {
  # 提取当前行观察对象服用的所有药物名称
  used_meds <- c(
    ifelse(data$med1[row_idx] == 1, "med1", NA),
    ifelse(data$med2[row_idx] == 1, "med2", NA),
    ifelse(data$med3[row_idx] == 1, "med3", NA),
    ifelse(data$med4[row_idx] == 1, "med4", NA),
    ifelse(data$med5[row_idx] == 1, "med5", NA)
  )
  used_meds <- used_meds[!is.na(used_meds)]
  
  # 匹配已服用药物对应的所有调整常数
  matched_delta <- med_adjust_map[med_adjust_map$med_name %in% used_meds, ]
  
  # 对每个指标取绝对值最大的调整值
  hdl_use <- matched_delta$hdl_delta[which.max(abs(matched_delta$hdl_delta))]
  ldl_use <- matched_delta$ldl_delta[which.max(abs(matched_delta$ldl_delta))]
  trig_use <- matched_delta$trig_delta[which.max(abs(matched_delta$trig_delta))]
  
  # 计算最终调整后的指标值
  data$adj_hdl[row_idx] <- data$hdl[row_idx] + hdl_use
  data$adj_ldl[row_idx] <- data$ldl[row_idx] + ldl_use
  data$adj_trig[row_idx] <- data$trig[row_idx] + trig_use
}

结果校验

你提到的两个示例场景计算结果完全符合规则要求:

  • 仅服用med5的观察对象:匹配到的hdl调整值为-2.1、ldl调整值为12、trig调整值为22.2,和示例计算逻辑完全一致
  • 同时服用med2、med3、med5的观察对象:hdl取med2的-6.3(绝对值6.3为三者最大)、ldl取med3的42.3(绝对值42.3为三者最大)、trig取med5的22.2(绝对值22.2为三者最大),和示例计算逻辑完全一致

小提示:如果你的数据集规模在十万行以上,可以把循环改成dplyr行式操作或者向量化计算提升运行速度,当前示例的百行/万行级数据用循环写法可读性更强,计算结果没有任何差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:09:11