我有一個數據幀與列t。我想創建n個滯後有名稱,如T-1,欄目T-2等。如何自動創建時間序列中的滯後?
year t t-1 t-2
19620101 1 NA NA
19630102 2 1 NA
19640103 3 2 1
19650104 4 3 2
19650104 5 4 3
19650104 6 5 4
我的想法是,我會做它在四個步驟:
- 一種循環使用使用「粘貼」
- 一種用於滯後列臨時dataframes環列名「粘貼」
- 一個循環創建滯後列
- cbind他們。
但我無法繼續執行代碼。東西粗糙:
df_final<-lagged(df="odd",n=3)
lagged<-function(df,n){
df<-zoo(df)
lags<-paste("A", 1:n, sep ="_")
for (i in 1:5) {
odd<-as.data.frame(lag(odd$OBS_Q,-1*i,na.pad = TRUE))
#Cbind here
}
我被困在寫這個功能。你可以用某種方式展示嗎?或這樣做的不同的更簡單的方法....
參考:Basic lag in R vector/dataframe
附錄:
真實數據:
x<-structure(list(DATE = 19630101:19630104, PRECIP = c(0, 0, 0,0),
OBS_Q = c(1.61, 1.48, 1.4, 1.33), swb = c(1.75, 1.73, 1.7,1.67),
gr4j = c(1.9, 1.77, 1.67, 1.58), isba = c(0.83, 0.83,0.83, 0.83),
noah = c(1.31, 1.19, 1.24, 1.31), sac = c(1.99,1.8, 1.66, 1.57),
swap = c(1.1, 1.05, 1.08, 0.99), vic.mm.day. = c(2.1,1.75, 1.55, 1.43)),
.Names = c("DATE", "PRECIP", "OBS_Q", "swb","gr4j", "isba", "noah", "sac", "swap", "vic.mm.day."),
class = c("data.table","data.frame"), row.names = c(NA, -4L))
要落後於列OBS_Q。
我已經安裝data.table,但我仍然收到此錯誤:eval(expr,envir,enclos)中的錯誤:無法找到函數「shift」。任何想法爲什麼? – maximusdooku 2015-01-20 22:31:32
謝謝。但我無法使用它。我試着先安裝devtools。但是我得到這個錯誤:軟件包'devtools'不可用(對於R版本3.0.1)。我正在使用RStudio。 – maximusdooku 2015-01-20 22:33:30
將R版本更新爲新版本,與Rsutio無關。看看[這裏](http://stackoverflow.com/questions/13656699/update-r-using-rstudio)如何。然後,你需要按照提供的鏈接。這是您從Github下載的開發版本。爲簡單起見,打開一個新的R見解並運行'library(devtools); install_github(「Rdatatable/data.table」,build_vignettes = FALSE)'。然後加載您的數據並再次嘗試代碼。 – 2015-01-20 22:34:14