是否有直接的方式在R中交换列?

时间:2016-09-06 09:55:32

标签: r matrix

我想知道是否有一种直接的方法来交换matrixR的任意一列。

假设我们要在矩阵中交换第一个(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])这样的直接命令(在早期帖子SO1SO2中建议)仅限于给定的n

是否有更直接的方式在大小为i的矩阵中交换两列jn

1 个答案:

答案 0 :(得分:3)

可以使用旋转索引完成列旋转。假设你有 n 列的矩阵 mat ,并且想要转移列 i j ,你可以做:

&#xA;&#xA;
  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 复制到双精度矢量中,然后进行更新。

&#xA;