合并两个整数列,保留 NA

Combine two integer columns, keeping NAs

我正在尝试合并两个整数列,但是,我想将 NA 保留在第三列中而不是将它们转换为 0。

例如,

help <- data.frame(score.a = c(NA, NA, 2, 2, NA, NA, NA, NA, NA, NA, 2, NA),
               score.b = c(NA, NA, NA, NA, 4, 4, NA, NA, 4, 4, NA, 4))

创造

       score.a score.b
1       NA      NA
2       NA      NA
3        2      NA
4        2       4
5       NA       4
6       NA       4
7       NA      NA
8       NA      NA
9       NA       4
10      NA       4
11       2      NA
12      NA       4

我想得到一个看起来像

的 df
   score.a score.b  score.c
1       NA      NA    NA
2       NA      NA    NA
3        2      NA    2
4        2      NA    2
5       NA       4    4
6       NA       4    4
7       NA      NA    NA
8       NA      NA    NA
9       NA       4    4
10      NA       4    4
11       2      NA    2
12      NA       4    4

数据不重叠,但当我使用 rowSums 或转换时,我最终在 score.c 中得到 0 而不是 NA。我试图 运行 na.rm = T 和 na.rm = F 无济于事。

您可以尝试 pmaxpmin(根据显示的输入数据)

help$score.c <- do.call(pmax, c(help, na.rm=TRUE))
#help$score.c <- do.call(pmin, c(help, na.rm=TRUE))

help
#  score.a score.b score.c
#1       NA      NA      NA
#2       NA      NA      NA
#3        2      NA       2
#4        2      NA       2
#5       NA       4       4
#6       NA       4       4
#7       NA      NA      NA
#8       NA      NA      NA
#9       NA       4       4
#10      NA       4       4
#11       2      NA       2
#12      NA       4       4

或使用 row/col 索引与 max.col

help$score.c <- help[cbind(1:nrow(help),max.col(!is.na(help)))]

如果您需要使用 rowSums,我们可以使用选项 na.rm=TRUE,然后将 0 替换为 NA 以获取同时具有 'NAs' 的行.

rowSums(help, na.rm=TRUE)*NA^!rowSums(!is.na(help))
#[1] NA NA  2  2  4  4 NA NA  4  4  2  4