gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 04:29:37 27 4
gpt4 key购买 nike

我有一个数据框:

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com