将行连续重采样到数据帧的列中(用于时间序列分析)

我有一个示例数据帧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个)行,并将其转换为列/向量:

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

以此类推...

最后,所有重新采样的行(即矢量)应重新绑定到新的数据帧。

我在寻找有效解决方案方面投入了很多精力,但是所有的实现都非常缓慢。

如何有效地解决我的问题?

aaa623946900 回答:将行连续重采样到数据帧的列中(用于时间序列分析)

这是一个简单的解决方案。我已将结果放入列表中,但可以将它们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]]
     [,]    2    7   12    3    8   13    4    9   14

[[3]]
     [,]    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    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,但是我认为这是更通用的解决方案。

本文链接:https://www.f2er.com/3048458.html

大家都在问