R rellena el vector eficientemente

Tengo un vector bastante grande (> 500,000 de longitud). Contiene un montón deNA intercalado con1 y siempre está garantizado que comienza con1.

Me gustaría reemplazar algunas de lasNA env1 con1, basado en una operación de comparación en índices contiguos de otro vectorv2 (de la misma longitud quev1).

¿Existe una forma eficiente de hacer esto en notación vectorizada para que el bucle se realice en una implementación de bajo nivel? Tal vez usandoifelse?

Ejemplo reproducible a continuación:

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

Respuestas a la pregunta(4)

Su respuesta a la pregunta