我有一个相当大的向量(长度> 500,000)。它包含一堆NA
穿插的,1
并且总是保证它以 . 开头1
。
我想根据对另一个向量(与 长度相同)的连续索引的比较操作,NA
用v1
替换其中的一些。1
v2
v1
是否有一种有效的方法可以在矢量化符号中执行此操作,以便在低级实现中完成循环?也许使用ifelse
?
下面的可重现示例:
v1<-c(1,NA,NA,NA,1,NA,NA,NA,NA,NA,1,NA,NA,1,NA,1,NA,NA,NA,NA,NA,NA,NA,NA,NA,1)
v2<-c(10,10,10,9,10,9,9,9,9,9,10,10,10,11,8,12,12,12,12,12,12,12,12,12,12,13)
# goal is to fill through v1 in such a way that whenever
# v1[i] == NA and v1[i-1] == 1 and v2[i] == v2[i-1], then v1[i] == 1
MM<-data.frame(v1,v2)
for (i in 2:length(v1)){
# conditions: v1[i-1] == 1; v1[i]==NA; v2[i]==v2[i-1]
if (!is.na(v1[i-1]) && is.na(v1[i]) && v2[i]==v2[i-1]){
v1[i]<-1
}
}
MM$v1_altered<-v1
MM