2014-07-14 2 views
-2

행렬의 열을 오른쪽으로 하나씩 이동하려고합니다.하나씩 열 이동

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

는 그렇게 어렵지 않다 때문에 당신이 검색 할 때 당신은 아마 아무것도 찾지 못했습니다 : '데이터 [C (을 NcoI (데이터), 1 (을 NcoI (데이터) -1))]' –

+0

들으 Joshua -이 입력 변수를 어떻게 사용할 수 있습니까? – meck373

+0

OK, 알겠습니다! 고마워!!! – meck373

답변

0

것 같습니다.

반환하려는 열 순서의 벡터를 생성 한 다음 열을 부분 집합으로 바꿉니다.

원본 Q는 c(4,1,2,3)으로 생성됩니다. 그래서

> 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 

이 원래의 질문에 대한 대답이 작업을 수행 할 수있는 magic 패키지에 편리한 기능이있다.

> 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 
관련 문제