如何将所有 NA 的行求和为 0/NA
How to sum across rows with all NAs to be 0/NA
我有一个数据框:
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 行中制作 X
和 Y
NA
。
非常感谢!
默认情况下,sum
或rowSums
return当我们使用na.rm = TRUE
且所有元素都是NA
时为0。为防止这种情况,请使用 if/else
或 case_when
方法,即确定是否有任何 non-NA 元素带有 if_any
,然后在其中获取相关列的 rowSums
case_when
(默认情况下 TRUE
将 return 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
我有一个数据框:
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 行中制作 X
和 Y
NA
。
非常感谢!
默认情况下,sum
或rowSums
return当我们使用na.rm = TRUE
且所有元素都是NA
时为0。为防止这种情况,请使用 if/else
或 case_when
方法,即确定是否有任何 non-NA 元素带有 if_any
,然后在其中获取相关列的 rowSums
case_when
(默认情况下 TRUE
将 return 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