R - 矢量/数组加法

Yu *_*eng 1 arrays average r vector multidimensional-array

我对矢量或数组操作有点麻烦.

我有三个3D阵列,我想找到它们的平均值.我怎样才能做到这一点?我们不能使用mean() ,因为它只返回一个值.

更重要的是阵列中的一些单元格是NA,这意味着如果我只是添加它们

A = (B + C + D)/3 
Run Code Online (Sandbox Code Playgroud)

结果也将显示NA.

如何让它识别出单元格是否为NA然后才跳过它.

喜欢

 A = c(NA, 10, 15, 15, NA)
 B = c(10, 15, NA, 22, NA)
 C = c(NA, NA, 20, 26, NA)
Run Code Online (Sandbox Code Playgroud)

我想要平均这些向量的输出

(10, (10+15)/2, (15+20)/2, (15+22+26)/3, NA)
Run Code Online (Sandbox Code Playgroud)

我们也不能使用na.omit,因为它会移动索引的顺序.

这是相应的代码.我希望它会有所帮助.

for (yr in 1950:2011) {
    temp_JFM <- sst5_sst2[,,year5_sst2==yr & (month5_sst2>=1 & month5_sst2<=3)]
       k = 0
       jfm=4*k+1
    for (i in 1:72) {
        for (j in 1:36) {
            iposst5_sst2[i,j,jfm] <- (temp_JFM[i,j,1]+temp_JFM[i,j,2]+temp_JFM[i,j,3])/3
        }
    }      
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

它已经解决了.

最简单的纠正方法如下所示.

iposst5_sst2[i,j,jfm] <- mean(temp_JFM[i,j,],na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)

jor*_*ran 7

我不完全确定你想要的输出是什么,但我猜你真正想要构建的不是三个3D阵列,而是一个你可以使用的4D阵列apply.

像这样的东西:

#Three 3D arrays...
A <- array(runif(1:27),dim = c(3,3,3))
B <- array(runif(1:27),dim = c(3,3,3))
C <- array(runif(1:27),dim = c(3,3,3))

#Become one 4D array
D <- array(c(A,B,C),dim = c(3,3,3,3))

#Now we can simply apply the function mean
# and use it's na.rm = TRUE argument.
apply(D,1:3,mean,na.rm = TRUE)
Run Code Online (Sandbox Code Playgroud)

  • +1 - 也比`apply`快得多,如果你正在使用大数组,你可以做`rowMeans(D,na.rm = TRUE,dims = 3)` (3认同)