r - R中没有NA的多阵列平均

标签 r multidimensional-array

我遇到一个多数组平均的问题,比如我有一个3维4*4*3数组x,

x
 , , 1

     [,1] [,2] [,3] [,4]
[1,]   NA   NA   NA   NA
[2,]  0.5   NA   NA   NA
[3,]   NA   NA   NA   NA
[4,]   NA   NA   NA   NA

, , 2

     [,1] [,2] [,3] [,4]
[1,]   NA   NA   NA   NA
[2,]  0.7   NA   NA   NA
[3,]  0.4   NA   NA   NA
[4,]   NA   NA   NA   NA

, , 3

     [,1] [,2] [,3] [,4]
[1,]   NA   NA  0.8   NA
[2,]   NA   NA   NA   NA
[3,]   NA   NA   NA   NA
[4,]   NA   NA   NA   NA

我想要得到的是没有 NA 的总和,即非 NA 元素数量的平均值:

基本上结果是这样的

     [,1] [,2] [,3] [,4]

[1,]   0   0  0.8   0
[2,]   0.6  0  0   0
[3,]   0.4  0   0   0
[4,]   0   0   0   0

在matlab中我这样做 nansum(x, 3)./sum(~isnan(x), 3), 我在R中尝试了很多,例如 apply(x, 3, sum, na.rm = T)Reduce ,尝试先得到初步结果

     [,1] [,2] [,3] [,4]

[1,]     0   0  0.8   0
[2,]   1.2   0    0   0
[3,]   0.4   0    0   0
[4,]     0   0    0   0

但我还是没搞定,有没有人有命中?

最佳答案

您使用 applyna.rm=TRUE 走在正确的轨道上。您只需使用参数 MARGIN=c(..., ...) 指定要应用的多个维度。

这是一个使用内置数据集泰坦尼克号的例子:

str(Titanic)
 table [1:4, 1:2, 1:2, 1:2] 0 0 35 0 0 0 17 0 118 154 ...
 - attr(*, "dimnames")=List of 4
  ..$ Class   : chr [1:4] "1st" "2nd" "3rd" "Crew"
  ..$ Sex     : chr [1:2] "Male" "Female"
  ..$ Age     : chr [1:2] "Child" "Adult"
  ..$ Survived: chr [1:2] "No" "Yes"

现在对第 3 维和第 4 维求和:

apply(Titanic, c(3, 4), sum, na.rm=TRUE)
       Survived
Age       No Yes
  Child   52  57
  Adult 1438 654

关于r - R中没有NA的多阵列平均,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11608900/

相关文章:

java - 如何将多维整数数组复制到另一个多维整数数组

c - 按字母顺序或降序对多个数组进行排序

r - 在 R 中绘制相关矩阵,如 Excel 示例所示

r - as.data.frame.default(data) : cannot coerce class ""formula""to a data. 帧中出现错误

R - 查找所有值为 NA 或单个值(0 方差)的列

r - parse_date_time() 将 DayofYear 转换为日期

php - 从表中检索特定行并将每一行存储为 session 中的关联数组

c++ - 使用模板友元函数 C++ 无效使用非静态数据成员错误

r - 如何在 names.arg 函数中使用表达式

python - 使用 Python 的 array.array 模块的二维数组?