逐个元素组合两个向量

Rob*_*ong 8 r

我有2个向量,例如:

A <- c(1,2,NA,NA,NA,NA,7)
B <- c(NA,NA,3,4,NA,NA,7)
Run Code Online (Sandbox Code Playgroud)

我想将它们组合起来,以便生成矢量

1,2,3,4,NA,NA,-1
Run Code Online (Sandbox Code Playgroud)

那是

  1. 当位置i的任一矢量中只有1个值(比如说X)存在(另一个是NA)时,新的矢量应该在位置i取值X.

  2. 当两个值在位置i处为NA时,新矢量应在位置i处取值NA

  3. 当两个向量在位置i处具有值时,新向量应在位置i处取值-1.

我可以通过循环轻松完成此操作,但是在大型数据集上它非常慢,所以任何人都可以提供快速的方法来执行此操作吗?

Sve*_*ein 11

这些命令创建向量:

X <- A
X[is.na(A)] <- B[is.na(A)]
X[is.na(B)] <- A[is.na(B)]
X[!is.na(A & B)] <- -1

#[1]  1  2  3  4 NA NA -1
Run Code Online (Sandbox Code Playgroud)


Rol*_*and 5

A <- c(1,2,NA,NA,NA,NA,7)
B <- c(NA,NA,3,4,NA,NA,7)
C <- rowMeans(cbind(A,B),na.rm=TRUE)
C[which(!is.na(A*B))]<- -1
#[1]   1   2   3   4 NaN NaN  -1
Run Code Online (Sandbox Code Playgroud)

基准测试:

Unit: microseconds
          expr    min     lq median     uq     max
1 Roland(A, B) 17.863 19.095 19.710 20.019  68.985
2   Sven(A, B) 11.703 13.243 14.167 14.783 100.398
Run Code Online (Sandbox Code Playgroud)