我想将矩阵中的列向右移动一次。
Input <- data.frame(read.csv2 ....)
矩阵看起来像:
1 2 3 4
1 2 3 4
1 2 3 4
应该像:
4 1 2 3
4 1 2 3
4 1 2 3
我用谷歌搜索了但我找不到任何东西。
感谢您的帮助!!!
这看起来很不错Moving columns within a data.frame() without retyping
答案 0 :(得分:0)
虽然评论中的答案适用于向右移动的一列,但它很难将这种方法扩展到其他班次和方向。
归结为生成要返回的列顺序的向量,然后对列进行子集化。
所以你原来的Q归结为生成c(4,1,2,3)
。 magic
包中有一个方便的功能可以执行此操作:
> install.packages("magic") # if you dont have it
> magic::shift(1:4,1)
[1] 4 1 2 3
所以:
> Data[,magic::shift(1:ncol(Data),1)]
[,1] [,2] [,3] [,4]
[1,] 13 1 5 9
[2,] 14 2 6 10
[3,] 15 3 7 11
[4,] 16 4 8 12
回答你原来的问题。然后,这很容易延伸到多个班次或负向(向左)班次:
> Data[,magic::shift(1:ncol(Data),-2)]
[,1] [,2] [,3] [,4]
[1,] 9 13 1 5
[2,] 10 14 2 6
[3,] 11 15 3 7
[4,] 12 16 4 8
当然正确的方法是创建矩阵移位功能:
> mshift = function(m,n=1){m[,magic::shift(1:ncol(m),n)]}
你可以检查:
> mshift(Data,1)
[,1] [,2] [,3] [,4]
[1,] 13 1 5 9
[2,] 14 2 6 10
[3,] 15 3 7 11
[4,] 16 4 8 12