2016-05-05 42 views
0

我想訂購和trasform每個樓層的陣列從最大到最小的值的值(每一個獨立)如本例:得到一個數組排序

#My array: 
a1 <- array(c(1,-4,13,0,1,0,-17,12,14,9,-3,-3),dim = c(2,3,4)) 
a1 
, , 1 

     [,1] [,2] [,3] 
[1,] 1 13 1 
[2,] -4 0 0 

, , 2 

    [,1] [,2] [,3] 
[1,] -17 14 -3 
[2,] 12 9 -3 

, , 3 

    [,1] [,2] [,3] 
[1,] 1 13 1 
[2,] -4 0 0 

, , 4 

     [,1] [,2] [,3] 
[1,] -17 14 -3 
[2,] 12 9 -3 

分爲:

a2 
, , 1 

     [,1] [,2] [,3] 
[1,] 2 1 2 #1FLOOR: 13 is the biggest --> (1); 1 is the second biggest --> (2); ecc... 
[2,] 4 3 3 

, , 2 

    [,1] [,2] [,3] 
[1,] 5 1 4 #2FLOOR: 14 is the biggest --> (1); 12 is the second biggest --> (2); ecc... 
[2,] 2 3 4 

, , 3 ecc... 

例如,如果我這樣做:

a2[]<-factor(-a1) 

它並不是獨立評估各個樓層,但等級值考慮到整個陣列

任何幫助嗎?謝謝

+0

使用'apply'和你提到的功能。 – Gregor

回答

4

在第三維上使用apply()並刪除因子的屬性c()。如果不以某種方式將因子強制爲整數,則矩陣自動被強制轉換爲字符。

a1[] <- apply(a1, 3, function(x) c(factor(-x))) 

這給更新a1

, , 1 

    [,1] [,2] [,3] 
[1,] 2 1 2 
[2,] 4 3 3 

, , 2 

    [,1] [,2] [,3] 
[1,] 5 1 4 
[2,] 2 3 4 

, , 3 

    [,1] [,2] [,3] 
[1,] 2 1 2 
[2,] 4 3 3 

, , 4 

    [,1] [,2] [,3] 
[1,] 5 1 4 
[2,] 2 3 4 
+0

如果你不介意Richard,那麼a1 []在這裏意味着什麼,我認爲這意味着創建一個名爲a1 []的數組,但我用a2 []厭倦了它,並且它抱怨對象'a2'沒有存在?假設對象已經存在,所以它不能表示創建a1 []。我沒有遵循 – user3507767

+1

@ user3507767 - 它取代了'a1'中的值。如果你不想這樣做,你可以先執行'a2 < - a1',然後'a2 [] < - ...'和'a1'保持不變。 –

+1

@ user3507767具體而言,'[]'是保持'a1'的現有維度相同並且只替換值的技巧。如果你擺脫'[]'代碼將運行,但你可能最終只有一個沒有任何行,列等矢量。 – Gregor