我想知道是否有一种直接的方法来交换matrix
中R
的任意一列。
假设我们要在矩阵中交换第一个(i=1
)和第三个(j=3
)列
n=3
mat <- matrix(1:(n^2),ncol=n)
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
无论矩阵
的大小n
如何,以下内容始终有效
i=1; j=3
mat2 <- mat[,i]
mat[,i] <- mat[,j]
mat[,j] <- mat2
而像cbind(mat[,3],mat[,2],mat[,1])
这样的直接命令(在早期帖子SO1和SO2中建议)仅限于给定的n
。
是否有更直接的方式在大小为i
的矩阵中交换两列j
和n
?
答案 0 :(得分:3)
可以使用旋转索引完成列旋转。假设你有 n
列的矩阵 mat
,并且想要转移列 i
和 j
,你可以做:
piv&lt; - 1:n; piv [c(i,j)]&lt; - as.integer(c(j,i))&#xA; mat&lt; - mat [,piv]&#xA;
&# xA;&#xA; as.integer
调用用于提高内存效率。 piv&lt; - 1:n
是一个整数向量,如果 i
且 j
是双精度数,只需调用 piv [c(i ,j)]&lt; - c(j,i)
将首先将 piv
复制到双精度矢量中,然后进行更新。