合并两个整数列,保留 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 无济于事。
您可以尝试 pmax
或 pmin
(根据显示的输入数据)
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
我正在尝试合并两个整数列,但是,我想将 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 无济于事。
您可以尝试 pmax
或 pmin
(根据显示的输入数据)
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