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

如何用rowSums计算临床数据指定列复合得分(特殊NA规则)

解决方案:创建符合规则的复合得分

你提到的需求是临床数据处理里很常见的场景,咱们可以用rowSums结合简单的条件判断来实现,完全匹配你设定的规则——NA视为0求和,但三个变量全为NA时保留NA。

步骤1:回顾原始数据

先确认你的初始数据结构:

patientid <- c(100,101,102,103,104,105,106)
outcome1 <- c(0,NA,1,0,1,NA,1)
outcome2 <- c(0,1,1,0,0,NA,1)
outcome3 <- c(0,NA,NA,0,1,NA,0)
outcome4 <- c(NA,NA,NA,0,1,NA,0)
Data<-data.frame(patientid=patientid,outcome1=outcome1,outcome2=outcome2,outcome3=outcome3,outcome4=outcome4)

步骤2:实现复合得分计算

这里提供两种写法,功能完全一致,你可以根据习惯选择:

写法一:分步清晰版

适合需要逐步检查中间结果的场景:

# 提取需要计算的三个结局变量列
selected_vars <- Data[, c("outcome1", "outcome2", "outcome4")]

# 标记哪些行的三个变量全为NA
all_na_rows <- apply(selected_vars, 1, function(row) all(is.na(row)))

# 计算复合得分(na.rm=TRUE会自动把NA当作0求和)
Data$composite <- rowSums(selected_vars, na.rm = TRUE)

# 把全NA的行的复合得分还原为NA
Data$composite[all_na_rows] <- NA

写法二:简洁一行版

适合追求代码紧凑的场景:

Data$composite <- ifelse(
  # 判断当前行的三个目标变量是否全为NA
  rowSums(is.na(Data[, c("outcome1", "outcome2", "outcome4")])) == 3,
  NA,  # 全NA时保留NA
  rowSums(Data[, c("outcome1", "outcome2", "outcome4")], na.rm = TRUE)  # 否则求和(NA自动视为0)
)

步骤3:验证结果

运行上述代码后,查看Data就能得到你期望的结果:

> Data
  patientid outcome1 outcome2 outcome3 outcome4 composite
1       100        0        0        0       NA         0
2       101       NA        1       NA       NA         1
3       102        1        1       NA       NA         2
4       103        0        0        0        0         0
5       104        1        0        1        1         3
6       105       NA       NA       NA       NA        NA
7       106        1        1        0        0         2

完全匹配你给出的目标数据结构和数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:08:00