Mam zestaw danych podobny do tegoogólnego opóźnienia w danych panelowych serii czasowych
User Date Value
A 2012-01-01 4
A 2012-01-02 5
A 2012-01-03 6
A 2012-01-04 7
B 2012-01-01 2
B 2012-01-02 3
B 2012-01-03 4
B 2012-01-04 5
Chcę stworzyć opóźnieniem Value
, z poszanowaniem User
.
User Date Value Value.lag
A 2012-01-01 4 NA
A 2012-01-02 5 4
A 2012-01-03 6 5
A 2012-01-04 7 6
B 2012-01-01 2 NA
B 2012-01-02 3 2
B 2012-01-03 4 3
B 2012-01-04 5 4
Zrobiłem to bardzo nieefektywnie w pętli
df$value.lag1<-NA
levs<-levels(as.factor(df$User))
levs
for (i in 1:length(levs)) {
temper<- subset(df,User==as.numeric(levs[i]))
temper<- rbind(NA,temper[-nrow(temper),])
df$value.lag1[df$User==as.numeric(as.character(levs[i]))]<- temper
}
Ale to jest bardzo powolny. Przyjrzałem się używaniu by
i tapply
, ale nie doszedłem do wniosku, jak je uruchomić.
Nie sądzę, że XTS lub TS będą działać z powodu elementu User.
Wszelkie sugestie?
Myślę, że pakiet 'plm' ma implementację dla tego typu danych. – Seb