我有一个数据框:
dat <- data.frame(X1 = c(0, NA, NA),
X2 = c(1, NA, NA),
X3 = c(1, NA, NA),
Y1 = c(1, NA, NA),
Y2 = c(NA, NA, NA),
Y3 = c(0, NA, NA))
我想为 X 和 Y 变量创建一个综合分数。这是我目前所拥有的:
clean_dat <- dat %>% rowwise() %>% mutate(X = sum(c(X1, X2, X3), na.rm = T),
Y = sum(c(Y1, Y2, Y3), na.rm = T))
但是,我希望所有 NA
的行(即第 2 行和第 3 行)在 X
和 Y 列中的综合得分为 0
。有谁知道如何做到这一点?
编辑:我想知道如何在第 2 行和第 3 行 NA
中制作 X
和 Y
。
非常感谢!
最佳答案
默认情况下,sum
或 rowSums
当我们使用 na.rm = TRUE
时返回 0当所有元素都是 NA
.为防止这种情况,请使用 if/else
或 case_when
方法即确定是否有任何非 NA 元素 if_any
, 然后取 rowSums
case_when
中的相关列(默认情况下 TRUE
将返回 NA
)
library(dplyr)
dat %>%
mutate(X = case_when(if_any(starts_with('X'), complete.cases)
~ rowSums(across(starts_with('X')), na.rm = TRUE)),
Y = case_when(if_any(starts_with('Y'), complete.cases) ~
rowSums(across(starts_with('Y')), na.rm = TRUE)) )
-输出
X1 X2 X3 Y1 Y2 Y3 X Y
1 0 1 1 1 NA 0 2 1
2 NA NA NA NA NA NA NA NA
3 NA NA NA NA NA NA NA NA
关于r - 如何将所有 NA 的行求和为 0/NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72262837/