计算滞后时间序列数据

huangapple go评论88阅读模式
英文:

Compute lagged time series data

问题

以下是翻译好的部分:

让我们假设我有这些数据

> data <- dplyr::tibble(v = c(1:10))
> data
# A tibble: 10 × 1
       v
   <int>
 1     1
 2     2
 3     3
 4     4
 5     5
 6     6
 7     7
 8     8
 9     9
10    10

我现在想创建一个形状为 11x5x1 的数组。特别地,行应该具有以下模式:

NA NA NA NA NA
NA NA NA NA 1
NA NA NA 1  2
NA NA 1  2  3
NA 1  2  3  4
1  2  3  4  5
....

有任何想法如何做到这一点吗?
谢谢!

编辑:

在使用二维时间序列时如何扩展这个方法?

英文:

Let's say I have this data

&gt; data &lt;- dplyr::tibble(v = c(1:10))
&gt; data
# A tibble: 10 &#215; 1
       v
   &lt;int&gt;
 1     1
 2     2
 3     3
 4     4
 5     5
 6     6
 7     7
 8     8
 9     9
10    10

I now want to create an array with the shape 11x5x1. Particularly, the rows should have the following pattern:

NA NA NA NA NA
NA NA NA NA 1
NA NA NA 1  2
NA NA 1  2  3
NA 1  2  3  4
1  2  3  4  5
....

and so on. Any ideas how to do so?
Thanks!

EDIT:

How to extend this when using a 2d timeseries?

答案1

得分: 1

1) 在前面放置5个NA,然后使用 embed。然后使用5:1反转每一行。不使用任何包。

embed(c(rep(NA, 5), data$v), 5)[, 5:1]

得到的结果如下:

      [,1] [,2] [,3] [,4] [,5]
 [1,]   NA   NA   NA   NA   NA
 [2,]   NA   NA   NA   NA    1
 [3,]   NA   NA   NA    1    2
 [4,]   NA   NA    1    2    3
 [5,]   NA    1    2    3    4
 [6,]    1    2    3    4    5
 [7,]    2    3    4    5    6
 [8,]    3    4    5    6    7
 [9,]    4    5    6    7    8
[10,]    5    6    7    8    9
[11,]    6    7    8    9   10

2) rollapply 另一种方法是使用 rollapplyr

library(zoo)
rollapplyr(c(rep(NA, 5), data$v), 5, c)
英文:

1) Place 5 NA's in front and then use embed. Then reverse each row using 5:1. No packages are used.

embed(c(rep(NA, 5), data$v), 5)[, 5:1]

giving

      [,1] [,2] [,3] [,4] [,5]
 [1,]   NA   NA   NA   NA   NA
 [2,]   NA   NA   NA   NA    1
 [3,]   NA   NA   NA    1    2
 [4,]   NA   NA    1    2    3
 [5,]   NA    1    2    3    4
 [6,]    1    2    3    4    5
 [7,]    2    3    4    5    6
 [8,]    3    4    5    6    7
 [9,]    4    5    6    7    8
[10,]    5    6    7    8    9
[11,]    6    7    8    9   10

2) rollapply An alternative is to use rollapplyr.

library(zoo)
rollapplyr(c(rep(NA, 5), data$v), 5, c)

答案2

得分: 0

使用 sapply

nr = 11 # 输出中的行数
nc = 5  # 输出中的列数
v = 1:10 # 初始向量

sapply(nc:1, function(x) c(rep(NA, x), v)[1:nr])

#       [,1] [,2] [,3] [,4] [,5]
#  [1,]   NA   NA   NA   NA   NA
#  [2,]   NA   NA   NA   NA    1
#  [3,]   NA   NA   NA    1    2
#  [4,]   NA   NA    1    2    3
#  [5,]   NA    1    2    3    4
#  [6,]    1    2    3    4    5
#  [7,]    2    3    4    5    6
#  [8,]    3    4    5    6    7
#  [9,]    4    5    6    7    8
# [10,]    5    6    7    8    9
# [11,]    6    7    8    9   10

使用 data.table::shift

library(data.table)
do.call(cbind, shift(1:11, 1:6, type = 'lag'))[, 5:1]

#       [,1] [,2] [,3] [,4] [,5]
#  [1,]   NA   NA   NA   NA   NA
#  [2,]   NA   NA   NA   NA    1
#  [3,]   NA   NA   NA    1    2
#  [4,]   NA   NA    1    2    3
#  [5,]   NA    1    2    3    4
#  [6,]    1    2    3    4    5
#  [7,]    2    3    4    5    6
#  [8,]    3    4    5    6    7
#  [9,]    4    5    6    7    8
# [10,]    5    6    7    8    9
# [11,]    6    7    8    9   10
英文:

With sapply:

nr = 11 #Number of rows in output
nc = 5 #Number of cols in output
v = 1:10 #Initial vector

sapply(nc:1, function(x) c(rep(NA, x), v)[1:nr])

#       [,1] [,2] [,3] [,4] [,5]
#  [1,]   NA   NA   NA   NA   NA
#  [2,]   NA   NA   NA   NA    1
#  [3,]   NA   NA   NA    1    2
#  [4,]   NA   NA    1    2    3
#  [5,]   NA    1    2    3    4
#  [6,]    1    2    3    4    5
#  [7,]    2    3    4    5    6
#  [8,]    3    4    5    6    7
#  [9,]    4    5    6    7    8
# [10,]    5    6    7    8    9
# [11,]    6    7    8    9   10

With data.table::shift:

library(data.table)
do.call(cbind, shift(1:11, 1:6, type = &#39;lag&#39;))[, 5:1]

#       [,1] [,2] [,3] [,4] [,5]
#  [1,]   NA   NA   NA   NA   NA
#  [2,]   NA   NA   NA   NA    1
#  [3,]   NA   NA   NA    1    2
#  [4,]   NA   NA    1    2    3
#  [5,]   NA    1    2    3    4
#  [6,]    1    2    3    4    5
#  [7,]    2    3    4    5    6
#  [8,]    3    4    5    6    7
#  [9,]    4    5    6    7    8
# [10,]    5    6    7    8    9
# [11,]    6    7    8    9   10

huangapple
  • 本文由 发表于 2023年6月1日 17:32:43
  • 转载请务必保留本文链接:https://go.coder-hub.com/76380498.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定