2014-10-02 1 views
0

저는 R 코드를 파이썬으로 번역하고 있습니다. 행을 정렬하는 data.frame에는 do.call 명령이 있습니다. 이것이 어떻게 이루어지면 나를 혼란스럽게합니다.do.call은 data.frame의 행을 어떻게 주문합니까?

signary = matrix(c(1, 1, 1,-1,-1,-1, 
        0, 0, 0, 1,-1, 0, 
        0, 1,-1, 0, 0, 0, 
        1,-1,-1, 0, 0, 0, 
        0, 0, 0, 1, 1,-1), 
       ncol=5) 

do.call('order', as.data.frame(signary)) 

[1] 5 6 4 3 1 2 

행의 순서는 어떻게 이루어 졌습니까?

감사합니다.

+0

주문을 어떻게 결정합니까? –

+0

signary 행렬은 do.call (...) 명령을 통과하는 일종의 행렬입니다. 이 행렬의 열은 상호 교환 될 수 있지만 행은 교환 될 수 없습니다. do.call (...) 명령으로 주어진 순위는 플롯 레이블을 정렬하는 데 사용됩니다. 나는 그것이 당신의 질문에 대답하는지 모르겠습니다. 감사. – essicolo

답변

2

이렇게하면 첫 번째 열, 두 번째 열, 세 번째 열 순서로 정렬됩니다. 당신이 do.call의 결과에 의해 색인을 다시하는 경우

문 등 열 3과의 관계를 깨고, 열 2과의 관계를 깨고, 열 하나 그래서 먼저 주문

ii<-do.call('order', as.data.frame(signary)) 
signary[ii,] 

#  [,1] [,2] [,3] [,4] [,5] 
# [1,] -1 -1 0 0 1 
# [2,] -1 0 0 0 -1 
# [3,] -1 1 0 0 1 
# [4,] 1 0 -1 -1 0 
# [5,] 1 0 0 1 0 
# [6,] 1 0 1 -1 0 

를 얻을 수

ii<-order(signary[,1], signary[,2], signary[,3], signary[,4], signary[,5]) 
ii 
# [1] 5 6 4 3 1 2 
+0

좋습니다. pandas sort_index를 사용하여 파이썬과 동일한 것을 찾을 수 있습니다 : signary_df = pd.DataFrame (signary); ii = np.array (signary_df.sort_index (by = range (0, signary_df.shape [1]), 오름차순 = True). 인덱스) – essicolo