r - R:我如何多次使用带有矩阵的滞后命令?
问题描述
我正在使用一个矩阵 (3520 * 10),它代表我对 10 个变量的日常观察。我的目标是获得由我的滞后变量形成的 30 个矩阵,这些矩阵可以定义为:
其中 p 是滞后顺序,在我的情况下p= 1:30
。然后,我的第一个矩阵将由我的十个变量的第一个滞后形成,大小为 (3490*10),第二个矩阵将由我的十个变量的第二个滞后形成,依此类推。
Matrix<-matrix[1:35200, ncol=10]
为了更好地解释我的观点,我将使用以下矩阵:
在这种情况下,p 将为 3。这意味着我将使用前三个观察值来构建新矩阵。例如,包含滞后变量的矩阵 whenp = 1
将是:
为了p = 2
为了p = 3
我试图使用该lag
命令,但它不适用于矩阵。有人可以为此任务推荐另一个命令。
解决方案
转换为df。执行lag
. 转换回矩阵。也许像这样:
library(dplyr)
library(purrr)
library(tidyr)
mat <- matrix(1:64, nrow = 8)
p <- 3 # number of lags
m <- 5 # values to include
mat_df <- as.data.frame(mat)
# Step 1: Lagged by values by mapping over 1:p
mat_lag <- map(1:p, ~ mutate_all(mat_df, lag, .x)) %>%
# Step 2: Drop rows with missing
map(drop_na) %>%
# Step 3: Now slice. Only m values starting from the last row are kept
map(~ slice(.x, (nrow(.x) - m + 1):nrow(.x)))
# Step 4: Convert to list of matrices
mat_lag %>%
map(as.matrix)
#> [[1]]
#> V1 V2 V3 V4 V5 V6 V7 V8
#> [1,] 3 11 19 27 35 43 51 59
#> [2,] 4 12 20 28 36 44 52 60
#> [3,] 5 13 21 29 37 45 53 61
#> [4,] 6 14 22 30 38 46 54 62
#> [5,] 7 15 23 31 39 47 55 63
#>
#> [[2]]
#> V1 V2 V3 V4 V5 V6 V7 V8
#> [1,] 2 10 18 26 34 42 50 58
#> [2,] 3 11 19 27 35 43 51 59
#> [3,] 4 12 20 28 36 44 52 60
#> [4,] 5 13 21 29 37 45 53 61
#> [5,] 6 14 22 30 38 46 54 62
#>
#> [[3]]
#> V1 V2 V3 V4 V5 V6 V7 V8
#> [1,] 1 9 17 25 33 41 49 57
#> [2,] 2 10 18 26 34 42 50 58
#> [3,] 3 11 19 27 35 43 51 59
#> [4,] 4 12 20 28 36 44 52 60
#> [5,] 5 13 21 29 37 45 53 61
由reprex 包于 2020-03-11 创建(v0.3.0)
推荐阅读
- ansible - Ansible:剧本范围的角色名称
- flutter - 实现概述文本字段在颤动的下拉菜单中输入带有标签文本
- css - 如何为不同的页面下一个js使用两个不同的全局css?
- vba - VBA 函数第一次正确返回一个值,但在第二次运行时则不正确
- swift - 使用 [UInt8] 的 Alamofire 发布请求
- amazon-web-services - 为 aws ec2 负载均衡器设置 http 基本授权密码
- sql-server - 尽管数据很小,但字符串列的 Power BI 字典大小都超过 1mb
- ios - 设备定向后子视图的中心
- r - R 在安装 gert 时因“捕获非法操作”而崩溃
- python - Matplotlib 图 '.supxlabel' 不起作用