2013-12-21 38 views
1

我希望獲得數組中每個元素的平均值。在一個簡單的例子,讓我們說我們有這個簡單的數組:在所有表和返回矩陣中平均數組中的每個元素

, , 1 

       [,1]   [,2]   [,3] 
[1,] 2.000000000 3.000000000 1.000000000 
[2,] 6.000000000 5.000000000 2.000000000 
[3,] 8.000000000 12.00000000 4.000000000 
[4,] 12.00000000 10.00000000 4.000000000 

, , 2 

       [,1]   [,2]   [,3] 
[1,] 4.000000000 6.000000000 2.000000000 
[2,] 4.000000000 10.00000000 3.000000000 
[3,] 8.000000000 12.00000000 4.000000000 
[4,] 8.000000000 20.00000000 6.000000000 

, , 3 

       [,1]   [,2]   [,3] 
[1,] 6.000000000 9.000000000 3.000000000 
[2,] 2.000000000 15.00000000 4.000000000 
[3,] 12.00000000 18.00000000 6.000000000 
[4,] 4.000000000 30.00000000 8.000000000 

我想找到的每一行我,我列在所有表數組中的平均(?)。在上述情況下,正確的結果會是這樣矩陣(對不起,我不是在彌補數字非常好):

   [,1]   [,2]   [,3] 
[1,] 4.000000000 6.000000000 2.000000000 
[2,] 6.000000000 10.00000000 3.000000000 
[3,] 8.000000000 12.00000000 4.000000000 
[4,] 12.00000000 20.00000000 6.000000000 

我可以「手」做算術:(my.array[,,1]+my.array[,,2]+my.array[,,3])/3,給出了一個單一的矩陣每個元素的平均值。但是,我的數據有很多NA值,而像mean()這樣的函數應該允許我使用na.rm=TRUE參數來處理這些缺失的值。

顯然,您可以使用mean(my.array[i,i,]來平均所有表格中的每個元素,但是是否有一種簡單的方法可以一次完成所有元素並且吐出一個矩陣?我認爲apply()將是一個不錯的選擇,但我還沒有找到正確的表達方式。

回答

3

您正在尋找這樣的:

apply(data, 1:2, mean) 
+0

謝謝,但是這並不完全做我想做的:它返回相同長度的數組(相同數量的表)作爲原始,而我想一個矩陣,其中第i行,第j列中的每個元素的均值均位於所有表中。 – Roger

+0

道歉,我有'MARGIN ='尺寸錯誤(我認爲它反映了列的數量)。這確實按預期工作,並且處理NAs,可以使用'apply(my.array,c(1,2),function(arr){mean(arr,na.rm = TRUE)})'。 – Roger

+1

@roger爲什麼不使用'apply(data,1:2,mean,na.rm = TRUE)'? –