多维数组操作R.

时间:2013-03-21 14:03:17

标签: arrays r

对不起,但我找不到用三维数组中的每个0替换它们所在列的平均值的方法。

感谢。所以,例如,让我们说我有这个数组j

j
, , 1

      [,1] [,2]
[1,]    0    6
[2,]    1    5
[3,]    2    2

, , 2

      [,1] [,2]
[1,]   11    0
[2,]   14   12
[3,]    0   14

, , 3

     [,1] [,2]
[1,]   19   22
[2,]   20   23
[3,]   21   24

我想

j
, , 1

      [,1] [,2]
[1,]    1    6
[2,]    1    5
[3,]    2    2

, , 2

      [,1] [,2]
[1,]   11    26/3
[2,]   14   12
[3,]   25/3   14

, , 3

     [,1] [,2]
[1,]   19   22
[2,]   20   23
[3,]   21   24

1 个答案:

答案 0 :(得分:3)

您可以使用apply

从以下数据开始:

arr <- array(0:5,dim=c(4,3,2))

, , 1

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

, , 2

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

你可以这样做:

apply(arr, c(2,3),function(v) { v[v==0] <- mean(v); v})

给出了:

, , 1

     [,1] [,2] [,3]
[1,]  1.5  4.0    2
[2,]  1.0  5.0    3
[3,]  2.0  2.5    4
[4,]  3.0  1.0    5

, , 2

     [,1] [,2] [,3]
[1,]  1.5  4.0    2
[2,]  1.0  5.0    3
[3,]  2.0  2.5    4
[4,]  3.0  1.0    5