2011-04-04 73 views
6

可以說,我有以下結構的數據幀:R:創建一個數據幀進行滾動窗口的

DF <- data.frame(x = 0:4, y = 5:9) 
> DF 
    x y 
1 0 5 
2 1 6 
3 2 7 
4 3 8 
5 4 9 

什麼是轉「DF」與數據幀的最有效方法以下結構:

w x y 
1 0 5 
1 1 6 
2 1 6 
2 2 7 
3 2 7 
3 3 8 
4 3 8 
4 4 9 

其中w是通過數據幀'DF'滾動的長度爲2的窗口。窗口的長度應是任意的,即,爲3倍的產率

w x y 
1 0 5 
1 1 6 
1 2 7 
2 1 6 
2 2 7 
2 3 8 
3 2 7 
3 3 8 
3 4 9 

長度我有點此問題難倒,因爲數據幀還可以包含列的任意數量的,即W,X,Y ,Z等

/編輯2:我已經意識到編輯1是有點不合理,因爲XTS似乎並不處理每個數據點的多次觀察

回答

8

我的方法是使用embed功能。首先要做的是創建一個滾動的索引序列到矢量中。取一個數據幀:

df <- data.frame(x = 0:4, y = 5:9) 

nr <- nrow(df) 
w <- 3   # window size 
i <- 1:nr   # indices of the rows 
iw <- embed(i,w)[, w:1] # matrix of rolling-window indices of length w 

> iw 
    [,1] [,2] [,3] 
[1,] 1 2 3 
[2,] 2 3 4 
[3,] 3 4 5 

wnum <- rep(1:nrow(iw),each=w) # window number 
inds <- i[c(t(iw))]    # the indices flattened, to use below 

dfw <- sapply(df, '[', inds) 
dfw <- transform(data.frame(dfw), w = wnum) 

> dfw 
    x y w 
1 0 5 1 
2 1 6 1 
3 2 7 1 
4 1 6 2 
5 2 7 2 
6 3 8 2 
7 2 7 3 
8 3 8 3 
9 4 9 3 
+0

+1非常好的使用embed() – 2011-04-05 08:34:54

相關問題