我想从最大值到最小值来排序和转换每个楼层的数组(每个独立)的值,如下例所示:
#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 :(得分: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