mercredi 22 avril 2015

Very slow R loop

I am trying to populate a column as follows:

At t-1: if NAV(t-1) - HWM(t-1) >0

then at t: HWM(t) = NAV(t) otherwise: HWM(t) = HWM(t-1)

My R skills are quite elementary and the following loop, though it works, is excruciatingly slow (150,000 observations)

for (i in 1:length(E$HWM)) {
  print(i)
HWM[E$t>2][i]<-ifelse(NAV_lag1[E$t>2][i]-HWM_lag1[E$t>2][i]>0,
                                           NAV_lag1[E$t>2][i],HWM_lag1[t>2[i])
HWM_lag1[i] <-lag(HWM,1)[i]
}

Any suggestions to make my process more efficient?

Thank you very much.

Here is what I have:

zz <- "t    NAV         HWM       NAV_lag1    HWM_lag1
1          1000         NA          NA         NA 
2          1200         1000        1000       
3          1400                     1200        
4          1200                     1400       
5          1100                     1200      
5          1000                     1100      "

Here is what I would like to get:

zz <- "t    NAV         HWM       NAV_lag1    HWM_lag1
1          1000         NA          NA         NA 
2          1200         1000        1000       1000 
3          1400         1200        1200       1000 
4          1200         1400        1400       1200
5          1100         1400        1200       1400
5          1000         1400        1100       1400"

Data <- read.table(text=zz, header = TRUE)

Aucun commentaire:

Enregistrer un commentaire