2013-03-21 105 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