我正在尝试组合两个整数列,但是,我想将NAs保留在第三列中,而不是将它们转换为0。
例如,
import sys
sys.dont_write_bytecode = True
创建
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))
我希望得到一个看起来像
的df 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
数据没有重叠,但是当我使用rowSums或转换时,我最终在score.c中使用0而不是NA。我试图运行na.rm = T和na.rm = F无济于事。
答案 0 :(得分:3)
您可以尝试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