2013-03-21 62 views
3

我很抱歉,但我不能找到一种方法,通过他们在。多维数组操作[R

感谢列的平均值在3维数组来代替每个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

请您的情况可重复的,即我们提供的数据和代码需要模仿你的情况。有关如何执行此操作的更多提示,请参阅http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example。 – 2013-03-21 14:04:19

回答

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 
+0

是的,这是我正在寻找,谢谢。 – user1627466 2013-03-21 14:40:53

+0

比我想要做的要容易得多...必须充分学习应用功能的力量! – 2013-03-21 14:44:28

+0

如果它解决了你的问题,你可以检查绿色标记。 – juba 2013-03-21 14:44:32