2012-11-01 41 views
1

對於具有79,000個觀察值的時間序列,我正在生成大量滯後變量(實際上是365)。當在R中產生滯後變量(並使用動物園)時避免產生循環

我目前在數據框OrdersData中有一列,名爲prospectdrop s。我先將其轉換爲zoo格式使用lag()功能:

prospectdrops<-zoo(OrdersData$prospectdrop) 

然後我執行for循環:

for (i in 1:365){ 
    prospectdrops[paste("lag",i,"day",sep="")] <- lag(prospectdrops,i*24,na.pad=TRUE) 
} 

然後我被迫循環再次使用cbind約束他們讓他們做好準備對於data.frame()

for (i in 1:365){ 
cbind(prospectdrops, prospectdrops[paste("lag",i,"day",sep="")]) 
} 

可以理解的,這需要永遠與for循環功能R.我知道,「應用」可能是答案,但沒有看到直接的合作mparator在功能的描述中。有任何想法嗎?

回答

4

k in lag.zoo可以是一個向量。見?lag.zoo

x <- zoo(11:21) 
lag(x,1:3) 
+0

謝謝!數據是按小時計算的,但我希望延遲是在一天之前(因此我的24小時乘數)。在滯後函數中,如何讓它在365次迭代中延遲(x,24 ... 48 .... 72 ...等等)我再次試圖避免for()循環。 – user1784454

+1

如果你想要滯後'24'和滯後'48',你只需要做'滯後(x,c(24,48))'等。對於所有的365說'lag(x,(1:365)* 24)'。 – mnel

+0

真棒。謝謝! – user1784454