构建具有重叠观察的数据框架

时间:2017-09-04 10:59:39

标签: r dataframe rolling-computation

假设我有一个具有以下结构的数据框:

> 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,2和3,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

我可以做一个像

这样的循环
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

我试图在不应用任何聚合函数的情况下重复一行行。这不起作用,因为我错过了一些行

我对此感到有点难过,并且已经四处寻找类似的问题,但找不到任何问题。有没有人有更好的想法?

1 个答案:

答案 0 :(得分:2)

我们可以做一个矢量化的方法

import 'rxjs/add/operator/distinctUntilChanged'; 
import 'rxjs/add/operator/take;