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

R语言合并二元变量生成新cvd变量及缺失值处理实现方法

R语言心血管疾病合并变量cvd生成方案

原代码使用paste(stroke,MI, BP)仅会将三个变量的取值拼接为字符串,未执行条件判断逻辑,无法生成符合规则的0/1编码cvd变量,以下是分场景的可直接运行实现代码。

无缺失值场景实现

赋值规则:三个变量任意一个取值为0则cvd=0,全为1则cvd=1,两种实现方式按需选择:

  • 逻辑判断写法(可读性强)
koratest <- transform(
  koratest,
  cvd = ifelse(stroke == 0 | MI == 0 | BP == 0, 0, 1)
)
  • 逐行取最小值写法(性能更优,适合大样本数据集)
# 只要行内存在0,逐行最小值即为0,否则为1,完全匹配规则
koratest$cvd <- pmin(koratest$stroke, koratest$MI, koratest$BP)

适配缺失值规则的实现

赋值规则:缺失值默认按1判定,任意行存在取值0则cvd=0,无取值0(无论是否含缺失值)则cvd=1,两种实现方式按需选择:

  • 逻辑判断写法(可读性强,规则映射清晰)
koratest <- transform(
  koratest,
  cvd = ifelse(
    # 判断时临时将NA替换为1,不修改原变量取值
    replace(stroke, is.na(stroke), 1) == 0 |
    replace(MI, is.na(MI), 1) == 0 |
    replace(BP, is.na(BP), 1) == 0,
    0, 1
  )
)
  • 逐行取最小值写法(简洁高效,大样本优先选择)
# 取逐行最小值时自动忽略NA,等价于NA按1判定的规则
koratest$cvd <- pmin(koratest$stroke, koratest$MI, koratest$BP, na.rm = TRUE)

规则有效性验证

用给出的含缺失值样例测试上述代码:

# 构建测试数据集
test_df <- data.frame(
  stroke = c(0,1,0),
  MI = c(1,NA,NA),
  BP = c(1,NA,1)
)
# 运行简洁版代码生成cvd
test_df$cvd <- pmin(test_df$stroke, test_df$MI, test_df$BP, na.rm = TRUE)
print(test_df)

输出结果完全匹配预期规则:

stroke MI BP cvd
1      0  1  1   0
2      1 NA NA   1
3      0 NA  1   0

注意事项

  • 上述代码均基于base R编写,无需安装额外依赖包,可直接运行
  • 代码为向量化运算,百万级样本量也可快速计算,无需编写逐行循环
  • 若变量中存在0、1、NA之外的异常取值,需先完成数据清洗再运行代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:48:34