我有两个向量,如下:
A <- c(1,2,NA,NA,NA,NA,7)
B <- c(NA,NA,3,4,NA,NA,7)我想把它们结合起来,这样得到的向量是
1,2,3,4,NA,NA,-1那是
我可以很容易地用一个循环来完成这个任务,但是在一个大的数据集中,它是非常慢的,所以任何人都能提供一种快速的方法来完成这个任务吗?
发布于 2012-09-20 11:24:54
这些命令创建了向量:
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发布于 2012-09-20 11:25:12
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基准:
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发布于 2012-09-20 12:11:30
有点晚了,但这里还有另一个选项,它定义了一个函数,将规则应用于两个向量cbind-ed。
# get the data
A <- c(1,2,NA,NA,NA,NA,7)
B <- c(NA,NA,3,4,NA,NA,7)
# define the function
process <- function(A,B) {
x <- cbind(A,B)
apply(x,1,function(x) {
if(sum(is.na(x))==1) {na.omit(x)} else
if(all(is.na(x))) {NA} else
if(!any(is.na(x))) {-1}
})
}
# call the function
process(A,B)
#[1] 1 2 3 4 NA NA -1使用函数的主要好处是可以更容易地更新规则或输入,从而将代码应用于新数据。
https://stackoverflow.com/questions/12511476
复制相似问题