向量到下一行开始 1 个观察的矩阵
Vector to a matrix where the next row starts 1 observation
假设我有一个包含 40 个观察值的数据集
y <- rnorm(40,10,10)
现在我想将这个向量转换成一个矩阵,每行有 4 个观测值。
最重要的是,我希望该行以值 y[i] 开始并在每次迭代中添加一个直到第 40 次观察。
例如:
r1 = y[1] y[2] y[3] y[4]
r2 = y[2] y[3] y[4] y[5]
r3 = y[3] y[4] y[5] y[6]
.
.
r40 = y[39] y[38] y[37] y[36]
有人知道怎么做吗?
您可以像这样使用matrix
:
y <- 1:40
matrix(y, 41, 4)[1:37,]
# [,1] [,2] [,3] [,4]
# [1,] 1 2 3 4
# [2,] 2 3 4 5
# [3,] 3 4 5 6
#...
#[35,] 35 36 37 38
#[36,] 36 37 38 39
#[37,] 37 38 39 40
或者在mapply
中使用seq
并用y
的值填充索引矩阵。
i <- 1:37
M <- t(mapply(seq, i, i+3))
M
# [,1] [,2] [,3] [,4]
# [1,] 1 2 3 4
# [2,] 2 3 4 5
# [3,] 3 4 5 6
#...
#[35,] 35 36 37 38
#[36,] 36 37 38 39
#[37,] 37 38 39 40
M[] <- y[M]
这是生成前 37 行的一种方法。如果你想改变最后 3 行的方向,那么使用相同的代码就很容易做到:
purrr::map(seq_len(37), ~y[.x:(.x+3)]) %>%
unlist() %>%
matrix(nrow = 37, byrow = T)
唯一的区别是首先保存前 37 行的值,然后生成最后 3 行,绑定它们,然后将该向量转换为矩阵。
尝试embed
embed(y, 4)[, 4:1]
这可以提供所需的输出
假设我有一个包含 40 个观察值的数据集
y <- rnorm(40,10,10)
现在我想将这个向量转换成一个矩阵,每行有 4 个观测值。 最重要的是,我希望该行以值 y[i] 开始并在每次迭代中添加一个直到第 40 次观察。 例如:
r1 = y[1] y[2] y[3] y[4]
r2 = y[2] y[3] y[4] y[5]
r3 = y[3] y[4] y[5] y[6]
.
.
r40 = y[39] y[38] y[37] y[36]
有人知道怎么做吗?
您可以像这样使用matrix
:
y <- 1:40
matrix(y, 41, 4)[1:37,]
# [,1] [,2] [,3] [,4]
# [1,] 1 2 3 4
# [2,] 2 3 4 5
# [3,] 3 4 5 6
#...
#[35,] 35 36 37 38
#[36,] 36 37 38 39
#[37,] 37 38 39 40
或者在mapply
中使用seq
并用y
的值填充索引矩阵。
i <- 1:37
M <- t(mapply(seq, i, i+3))
M
# [,1] [,2] [,3] [,4]
# [1,] 1 2 3 4
# [2,] 2 3 4 5
# [3,] 3 4 5 6
#...
#[35,] 35 36 37 38
#[36,] 36 37 38 39
#[37,] 37 38 39 40
M[] <- y[M]
这是生成前 37 行的一种方法。如果你想改变最后 3 行的方向,那么使用相同的代码就很容易做到:
purrr::map(seq_len(37), ~y[.x:(.x+3)]) %>%
unlist() %>%
matrix(nrow = 37, byrow = T)
唯一的区别是首先保存前 37 行的值,然后生成最后 3 行,绑定它们,然后将该向量转换为矩阵。
尝试embed
embed(y, 4)[, 4:1]
这可以提供所需的输出