构建具有重叠观测值的数据框
Build a data frame with overlapping observations
假设我有一个具有以下结构的数据框:
> 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-length observation windows,这样如果 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
我试图在不应用任何聚合函数的情况下重复一行行。这不起作用,因为我缺少一些行
我对此有点困惑,并四处寻找类似的问题,但没有找到任何问题。有没有人有更好的主意?
我们可以采用矢量化方法
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
假设我有一个具有以下结构的数据框:
> 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-length observation windows,这样如果 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
我试图在不应用任何聚合函数的情况下重复一行行。这不起作用,因为我缺少一些行
我对此有点困惑,并四处寻找类似的问题,但没有找到任何问题。有没有人有更好的主意?
我们可以采用矢量化方法
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