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