私はかなり大きなベクトルを持っています(長さが> 500,000)。NA
散在しているものがたくさん含まれており、1
で始まることが常に保証されています1
。
別のベクトル(と同じ長さ)の連続するインデックスの比較操作に基づいて、NA
inの一部をに置き換えたいと思います。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