2017-02-19 30 views
0

当NA和NaN出现时,我想要采用两个矩阵元素的平均值。我知道类似的问题被反复询问,但不知道NA和NaN。如何提取NA和NaN时两个矩阵元素的平均值?

对于NA + 1.2,期望的平均值是1.2。

l1 = 3 
l2 = 3 
set.seed(1000) 
y1 <- matrix(rnorm(l1*l2),l1,l2) 
y2 <- matrix(rnorm(l1*l2),l1,l2) 

desired_output_if_no_NA <- (y1+y2)/2 

y1[1,2] <- NA 
y2[2,1] <- NaN 

desired_output <- ? 
+0

你有什么预期输出?它会有NA和NaN。为什么(y1 + y2)/ 2不适合你? – cderv

回答

1

您还没有指定什么你想要的平均值为-1.20 + NaN。它可能是-1.2或NaN。要得到它也不难。

如果你想的意思是(-1.2,NAN)= -1.2,使用

DO = (y1 + y2)/2 
DO[is.na(y1)] = y2[is.na(y1)] 
DO[is.na(y2)] = y1[is.na(y2)] 
DO 
      [,1]  [,2]   [,3] 
[1,] -0.9094480 0.1213812 -0.152905201 
[2,] -1.2058566 -0.4537133 0.437414704 
[3,] -0.2566812 -0.8607652 0.003213122 

如果你想的意思是(-1.2,NAN)= NaN时,使用

DO = (y1 + y2)/2 
DO[!is.nan(y1) & is.na(y1)] = y2[!is.nan(y1) & is.na(y1)] 
DO[!is.nan(y2) & is.na(y2)] = y1[!is.nan(y2) & is.na(y2)] 
DO 
      [,1]  [,2]   [,3] 
[1,] -0.9094480 0.1213812 -0.152905201 
[2,]  NaN -0.4537133 0.437414704 
[3,] -0.2566812 -0.8607652 0.003213122 
1

制造阵列出矩阵:

arr <- array(cbind(y1,y2), dim = c(dim(y1), 2)) 

然后用colMeans,通过它可以处理缺失值(NANAN):

colMeans(aperm(arr, c(3, 1, 2)), na.rm = TRUE) 

#   [,1]  [,2]   [,3] 
#[1,] -0.9094480 0.1213812 -0.152905201 
#[2,] -1.2058566 -0.4537133 0.437414704 
#[3,] -0.2566812 -0.8607652 0.003213122