我有两个向量,A 和 B。我正在使用 dyplyr 中的 mutate 从 A 和 B 计算一个新向量 C。该操作是一个总和,因为我只想将两个变量连接为一个(来自二元性别中的单独分析的分数)。在给定行的两个向量都有 NA 的情况下,我需要新向量 C 来反映 NA,而不是 0。目前我正在使用:
DF=mutate(DF, C = rowSums(cbind(A, B), na.rm = T))
Run Code Online (Sandbox Code Playgroud)
但是,如果 A 和 B 向量都具有 NA,则这会给出“0”值。我已经搜索了有关类似主题的其他帖子,但无法从中提取出我需要的内容。
这是一个 dplyr 单线。它的工作原理是dplyr::coalesce输出它收到的第一个非 NA。因此,如果可以计算总和,则使用该总和,否则输出非 NA 值,或者如果两者都是 NA,则为 NA。
library(dplyr)
df %>% mutate(c = coalesce(a+b, a, b))
## A tibble: 4 x 3
# a b c
# <dbl> <dbl> <dbl>
#1 1 NA 1
#2 NA NA NA
#3 NA 2 2
#4 2 3 5
Run Code Online (Sandbox Code Playgroud)
(使用 cardinal40 的样本df)
df <- tibble(a = c(1, NA, NA, 2),
b = c(NA, NA, 2, 3))
Run Code Online (Sandbox Code Playgroud)