общее отставание в данных панели временных рядов

У меня есть набор данных, похожий на этот

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

. Я хочу создать лаг в Value , учитывая 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

Я сделал это в цикле очень неэффективно

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
      }

Но это очень медленно. Я рассмотрел использование в и tapply , но не понял, как заставить их работать.

Я не думаю, что XTS или TS будут работать из-за элемента User.

Есть предложения?

11
задан Daniel Egan 18 January 2012 в 12:42
поделиться