R 如何滚动展开矩阵
例如,我有一个矩阵:R 如何滚动展开矩阵,r,matrix,scroll,R,Matrix,Scroll,例如,我有一个矩阵: [,1] [,2] [,3] [,4] [1,] 1 2 3 4 [2,] 5 6 7 8 [3,] 9 10 11 12 [4,] 13 14 15 16 我希望它变成 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [1,] 1 2 3 4 5 6 7 8 [2,] 5 6
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
[4,] 13 14 15 16
我希望它变成
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 2 3 4 5 6 7 8
[2,] 5 6 7 8 9 10 11 12
[3,] 9 10 11 12 13 14 15 16
如何在不使用循环的情况下执行此操作?1)zoo::rollapply
library(zoo)
rollapply(m, 2, function(x) c(t(x)), by.column = FALSE)
给予:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 2 3 4 5 6 7 8
[2,] 5 6 7 8 9 10 11 12
[3,] 9 10 11 12 13 14 15 16
1a)这也可以给出相同的答案:
rollapply(c(t(m)), 8, c, by = 4)
t(sapply(1:3, function(i) t(m)[, i + 0:1]))
2)sapply此备选方案不使用软件包,并给出相同的答案:
rollapply(c(t(m)), 8, c, by = 4)
t(sapply(1:3, function(i) t(m)[, i + 0:1]))
1)动物园::rollapply
library(zoo)
rollapply(m, 2, function(x) c(t(x)), by.column = FALSE)
给予:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 2 3 4 5 6 7 8
[2,] 5 6 7 8 9 10 11 12
[3,] 9 10 11 12 13 14 15 16
1a)这也可以给出相同的答案:
rollapply(c(t(m)), 8, c, by = 4)
t(sapply(1:3, function(i) t(m)[, i + 0:1]))
2)sapply此备选方案不使用软件包,并给出相同的答案:
rollapply(c(t(m)), 8, c, by = 4)
t(sapply(1:3, function(i) t(m)[, i + 0:1]))
在base R中,您可以将行选择与
seq
一起使用:
x <- read.table(text="
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16", header=FALSE)
cbind(x[seq(1, nrow(x)-1, by=1),],
x[seq(2, nrow(x), by=1),])
V1 V2 V3 V4 V1 V2 V3 V4
1 1 2 3 4 5 6 7 8
2 5 6 7 8 9 10 11 12
3 9 10 11 12 13 14 15 16
x在基本R中,您可以将行选择与seq
一起使用:
x <- read.table(text="
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16", header=FALSE)
cbind(x[seq(1, nrow(x)-1, by=1),],
x[seq(2, nrow(x), by=1),])
V1 V2 V3 V4 V1 V2 V3 V4
1 1 2 3 4 5 6 7 8
2 5 6 7 8 9 10 11 12
3 9 10 11 12 13 14 15 16
x代数上,它可以通过乘以以下矩阵来实现
m <- matrix(1:16, 4, 4, byrow=T)
cbind(diag(3), 0, 0, diag(3)) %*% (diag(2) %x% m)
m代数上,它可以通过乘以以下矩阵来实现
m <- matrix(1:16, 4, 4, byrow=T)
cbind(diag(3), 0, 0, diag(3)) %*% (diag(2) %x% m)
m这里的规则是什么<代码>nrows-一次1行
行?你试过什么?@siralen你为什么要删除帖子?它似乎得到了预期的输出这里的规则是什么<代码>nrows-一次1行
行?你试过什么?@siralen你为什么要删除帖子?它似乎得到了预期的产出