我正在尝试使用R将某个矩阵的所有元素移位1。我有一个相当大的10x10矩阵,需要多次执行此操作。我不确定如何高效地执行此操作。例如,我有:
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
目标是使矩阵看起来像这样:
[,1] [,2] [,3]
[1,] 9 3 6
[2,] 1 4 7
[3,] 2 5 8
谢谢!
答案 0 :(得分:3)
这是一个选择
mat <- matrix(1:9, nrow = 3)
matrix(c(mat[length(mat)], mat[-length(mat)]),
nrow = dim(mat)[1])
# [,1] [,2] [,3]
#[1,] 9 3 6
#[2,] 1 4 7
#[3,] 2 5 8
c(mat[length(mat)], mat[-length(mat)])
将取自mat
中的最后一个元素,并将其放在第一个位置。
我们也可以做
mat[] <- c(mat[length(mat)], mat[-length(mat)])
答案 1 :(得分:0)
我认为 binhf 包的 shift 函数给出了一个易于理解的语句,可以允许在任一方向上任意移位:
library(binhf)
mat <- matrix(1:9, nrow = 3)
matrix(shift(mat,places=1),nrow=dim(mat)[1])
# [,1] [,2] [,3]
#[1,] 9 3 6
#[2,] 1 4 7
#[3,] 2 5 8
或简单地:
matrix(shift(mat,1),nrow=dim(mat)[1])