r - 如何将所有 NA 的行求和为 0/NA

标签 r dplyr data-wrangling

我有一个数据框:

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 行)在 XY 列中的综合得分为 0 。有谁知道如何做到这一点?

编辑:我想知道如何在第 2 行和第 3 行 NA 中制作 XY

非常感谢!

最佳答案

默认情况下,sumrowSums当我们使用 na.rm = TRUE 时返回 0当所有元素都是 NA .为防止这种情况,请使用 if/elsecase_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/

相关文章:

Rowwise sum 在 R 的 dplyr 中不起作用

r - 基于引用表中日期的子集

r - 在循环中将数据附加到数据帧 - 函数仅返回数据帧的最后一行

r - (R, dplyr) 选择多个以相同字符串开头的列并按组汇总平均值 (90% CI)

r - 根据 dplyr 中组之间的条件添加新列

r - 将所有行粘贴在一起的最快方法

r - 在 R 中快速计算字符串中的数字

r - 将函数参数传递给 dplyr 和 ggplot

r - 将数据框拆分为列表中的多个数据框,每列分别

R按列中的数字对数据进行分组