Tôi có một bộ dữ liệu tương tự như nàylag chung dữ liệu bảng của chuỗi thời gian
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
Tôi muốn tạo ra một độ trễ của Value
, tôn trọng 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
tôi đã thực hiện nó rất không hiệu quả trong một vòng lặp
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
}
Nhưng điều này là rất chậm. Tôi đã xem xét sử dụng by
và tapply
, nhưng không tìm ra cách làm cho chúng hoạt động.
Tôi không nghĩ rằng XTS hoặc TS sẽ hoạt động vì yếu tố Người dùng.
Mọi đề xuất?
Tôi nghĩ gói 'plm' có triển khai cho loại dữ liệu này. – Seb