2017-09-04 63 views
2

可以說我有具有以下結構的數據幀:構建具有重疊的觀測數據幀

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

我需要建立與來自第一數據幀重疊的觀測一個新的數據幀被用作輸入用於構建Rglpk優化庫的A矩陣。我會使用n長的觀察窗口,這樣如果n = 2,結果數據幀將連接行1 & 2,3 & 4等等。所得到的數據幀的長度將是

(numberOfObservations-windowSize+1)*windowSize 

這個例子與windowSize結果= 2會像

x y 
1 1 6 
2 2 7 
3 2 7 
4 3 8 
5 3 8 
6 4 9 
7 4 9 
8 5 10 

I的結構可以做一個環狀

DFResult <- NULL 
numBlocks <- nrow(DF)-windowSize+1 
for (i in 1:numBlocks) { 
    DFResult <- rbind(DFResult, DF[i:(i+horizon-1), ]) 
} 

但是這似乎很低效,特別是對於非常大的數據幀。

我也試過

rollapply(data=DF, width=windowSize, FUN=function(x) x, by.column=FALSE, by=1) 
    x y 
[1,] 1 6 
[2,] 2 7 
[3,] 2 7 
[4,] 3 8 

我在那裏試圖重複行的塊不應用任何聚合函數。這是行不通的,因爲我失去了一些行

我有點難倒了這一點,並環顧四周尋找類似的問題,但找不到任何。有沒有人有更好的想法?

回答

2

我們可以做一個量化的方法

i1 <- seq_len(nrow(DF)) 
res <- DF[c(rbind(i1[-length(i1)], i1[-1])),] 
row.names(res) <- NULL 
res 
# x y 
#1 1 6 
#2 2 7 
#3 2 7 
#4 3 8 
#5 3 8 
#6 4 9 
#7 4 9 
#8 5 10