R wydajnie wypełnij wektor

Mam dość duży wektor (> 500 000 długości). Zawiera kilkaNA przeplatany1 i zawsze jest gwarantowane, że zaczyna się od1.

Chciałbym zastąpić niektóre z nichNA wv1 z1, w oparciu o operację porównania przylegających indeksów innego wektorav2 (o tej samej długości cov1).

Czy istnieje skuteczny sposób na zrobienie tego w notacji wektorowej, aby pętla została wykonana w implementacji niskiego poziomu? Może za pomocąifelse?

Powtarzalny przykład poniżej:

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

questionAnswers(4)

yourAnswerToTheQuestion