2016-05-05 2 views
0

Я хотел бы заказать и trasform значения массива каждого этажа (в каждом из них независимо) от самых больших до наименьшего значения, как в этом примере:Getting массив упорядоченный

#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 

Into:

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

Если вы не возражаете против Ричарда, что здесь означает a1 [], я думал, что это означает создать массив с именем a1 [], но я устал от него с помощью a2 [], и он жаловался, что объект «a2» не существовать? Предполагается, что объект уже существует, поэтому он не может означать создание a1 []. Я не следую – user3507767

+1

@ user3507767 - Он заменяет значения в 'a1'. Если вы не хотите этого делать, сначала вы можете сделать 'a2 <- a1', тогда' a2 [] <- ... 'и' a1' останутся без изменений. –

+1

@ user3507767 В частности, '[]' является трюком, чтобы сохранить существующие измерения 'a1' одинаковыми и заменять только значения. Если вы избавитесь от '[]' кода будет работать, но вы можете просто положить вектор без каких-либо строк, столбцов и т. Д. – Gregor

Смежные вопросы