我有一個相當大的矢量(長度> 500,000)。它包含一串穿着1
的NA
,始終保證它始於1
。R有效地填充矢量
我想與1
替換一些NA
在v1
,基於(作爲v1
相同長度的)另一矢量v2
的連續指標的比較操作。
有沒有一種有效的方法來做到這一點在向量化的符號,以便循環是在低級別的實現?也許使用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
你能提供一個v2的例子嗎?即一個[可重現的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)... – 2012-07-09 12:13:48
@JoshuaUlrich我編輯了我原來的帖子,添加了可重現的例子。複製粘貼應該可行,謝謝 – 2012-07-09 13:16:06
您的可重複使用的示例與您在'v1'和'v2'上運行的初始不可重複的示例不同。哪個包含你想要的輸出? – 2012-07-09 13:57:18