计算滞后时间序列数据

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

Compute lagged time series data

问题

以下是翻译好的部分:

让我们假设我有这些数据

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

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

  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. ....

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

编辑:

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

英文:

Let's say I have this data

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

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

  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. ....

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反转每一行。不使用任何包。

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

得到的结果如下:

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

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

  1. library(zoo)
  2. 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.

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

giving

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

2) rollapply An alternative is to use rollapplyr.

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

答案2

得分: 0

使用 sapply

  1. nr = 11 # 输出中的行数
  2. nc = 5 # 输出中的列数
  3. v = 1:10 # 初始向量
  4. sapply(nc:1, function(x) c(rep(NA, x), v)[1:nr])
  5. # [,1] [,2] [,3] [,4] [,5]
  6. # [1,] NA NA NA NA NA
  7. # [2,] NA NA NA NA 1
  8. # [3,] NA NA NA 1 2
  9. # [4,] NA NA 1 2 3
  10. # [5,] NA 1 2 3 4
  11. # [6,] 1 2 3 4 5
  12. # [7,] 2 3 4 5 6
  13. # [8,] 3 4 5 6 7
  14. # [9,] 4 5 6 7 8
  15. # [10,] 5 6 7 8 9
  16. # [11,] 6 7 8 9 10

使用 data.table::shift

  1. library(data.table)
  2. do.call(cbind, shift(1:11, 1:6, type = 'lag'))[, 5:1]
  3. # [,1] [,2] [,3] [,4] [,5]
  4. # [1,] NA NA NA NA NA
  5. # [2,] NA NA NA NA 1
  6. # [3,] NA NA NA 1 2
  7. # [4,] NA NA 1 2 3
  8. # [5,] NA 1 2 3 4
  9. # [6,] 1 2 3 4 5
  10. # [7,] 2 3 4 5 6
  11. # [8,] 3 4 5 6 7
  12. # [9,] 4 5 6 7 8
  13. # [10,] 5 6 7 8 9
  14. # [11,] 6 7 8 9 10
英文:

With sapply:

  1. nr = 11 #Number of rows in output
  2. nc = 5 #Number of cols in output
  3. v = 1:10 #Initial vector
  4. sapply(nc:1, function(x) c(rep(NA, x), v)[1:nr])
  5. # [,1] [,2] [,3] [,4] [,5]
  6. # [1,] NA NA NA NA NA
  7. # [2,] NA NA NA NA 1
  8. # [3,] NA NA NA 1 2
  9. # [4,] NA NA 1 2 3
  10. # [5,] NA 1 2 3 4
  11. # [6,] 1 2 3 4 5
  12. # [7,] 2 3 4 5 6
  13. # [8,] 3 4 5 6 7
  14. # [9,] 4 5 6 7 8
  15. # [10,] 5 6 7 8 9
  16. # [11,] 6 7 8 9 10

With data.table::shift:

  1. library(data.table)
  2. do.call(cbind, shift(1:11, 1:6, type = &#39;lag&#39;))[, 5:1]
  3. # [,1] [,2] [,3] [,4] [,5]
  4. # [1,] NA NA NA NA NA
  5. # [2,] NA NA NA NA 1
  6. # [3,] NA NA NA 1 2
  7. # [4,] NA NA 1 2 3
  8. # [5,] NA 1 2 3 4
  9. # [6,] 1 2 3 4 5
  10. # [7,] 2 3 4 5 6
  11. # [8,] 3 4 5 6 7
  12. # [9,] 4 5 6 7 8
  13. # [10,] 5 6 7 8 9
  14. # [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:

确定