连续将行重新采样到数据帧的列中(用于时间序列分析)
Successively resampling rows into columns of a data frame (for time series analysis)
我有一个示例数据框 df:
x1 x2 x3
1 1 6 11
2 2 7 12
3 3 8 13
4 4 9 14
5 5 10 15
现在我想按以下方式对该数据框重新采样:
转到第一行并提取k(例如3)行并将它们转换为columns/vector:
1 6 11 2 7 12 3 8 13
然后,转到第二行,做同样的事情:
2 7 12 3 8 13 4 9 14
第三行是
3 8 13 4 9 14 5 10 15
等等...
最后,所有重新采样的行也就是向量应该绑定到一个新的数据帧。
我在寻找有效解决方案方面做了很多工作,但所有实施都非常缓慢。
我怎样才能有效地解决我的问题?
这是一个简单的解决方案。我已将结果放入列表中,但它们可以很容易地 cbind
编辑到数据框中。
dlist<-list()
for(i in 1:(nrow(data)-2)) {
dlist[[i]]<-matrix(t(data[i:(i+2),]),nrow=1)
}
dlist
[[1]]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 1 6 11 2 7 12 3 8 13
[[2]]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 2 7 12 3 8 13 4 9 14
[[3]]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 3 8 13 4 9 14 5 10 15
这是个好问题!所以,我只是把这个替代解决方案放在这里,以防我将来回来寻找它:-)
library(purrr)
map((nrow(df) - 1):0,~c(t(df[(nrow(df) - .x):nrow(df),]))[1:(k * ncol(df))]) %>%
do.call(rbind,.)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 1 6 11 2 7 12 3 8 13
[2,] 2 7 12 3 8 13 4 9 14
[3,] 3 8 13 4 9 14 5 10 15
[4,] 4 9 14 5 10 15 NA NA NA
[5,] 5 10 15 NA NA NA NA NA NA
显然,我们可以过滤掉 NA
-s,但我相信这是更通用的解决方案。
我有一个示例数据框 df:
x1 x2 x3
1 1 6 11
2 2 7 12
3 3 8 13
4 4 9 14
5 5 10 15
现在我想按以下方式对该数据框重新采样:
转到第一行并提取k(例如3)行并将它们转换为columns/vector:
1 6 11 2 7 12 3 8 13
然后,转到第二行,做同样的事情:
2 7 12 3 8 13 4 9 14
第三行是
3 8 13 4 9 14 5 10 15
等等...
最后,所有重新采样的行也就是向量应该绑定到一个新的数据帧。
我在寻找有效解决方案方面做了很多工作,但所有实施都非常缓慢。
我怎样才能有效地解决我的问题?
这是一个简单的解决方案。我已将结果放入列表中,但它们可以很容易地 cbind
编辑到数据框中。
dlist<-list()
for(i in 1:(nrow(data)-2)) {
dlist[[i]]<-matrix(t(data[i:(i+2),]),nrow=1)
}
dlist
[[1]]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 1 6 11 2 7 12 3 8 13
[[2]]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 2 7 12 3 8 13 4 9 14
[[3]]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 3 8 13 4 9 14 5 10 15
这是个好问题!所以,我只是把这个替代解决方案放在这里,以防我将来回来寻找它:-)
library(purrr)
map((nrow(df) - 1):0,~c(t(df[(nrow(df) - .x):nrow(df),]))[1:(k * ncol(df))]) %>%
do.call(rbind,.)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 1 6 11 2 7 12 3 8 13
[2,] 2 7 12 3 8 13 4 9 14
[3,] 3 8 13 4 9 14 5 10 15
[4,] 4 9 14 5 10 15 NA NA NA
[5,] 5 10 15 NA NA NA NA NA NA
显然,我们可以过滤掉 NA
-s,但我相信这是更通用的解决方案。