【问题标题】:R: How to build sum of arrays third dimension containing NAs and returning a list?R:如何构建包含 NA 的第三维数组总和并返回一个列表?
【发布时间】:2015-12-20 10:20:37
【问题描述】:

我想构建一个数组的第三维之和。这里有一些示例数据(带有 3d 名称,这很重要):

my.array <- array(1:24, dim=c(3,4,2))
dimnames(my.array)[[3]] <- c("111.2012", "112.2012")

因为我想要一个列表作为输出,所以我会这样做(根据 Ananda Mahto),它适用于这个示例(并保留名称):

as.list(apply(my.array, MARGIN=c(3), sum))

但是,不在包含 NA 的数组上。举个例子:

my.arrayNA <- array(c(NA,1,NA,5,6,3,NA,5), dim=c(2,2,2))

我尝试如下使用na.rm=TRUE,但没有成功。

as.list(apply(my.arrayNA, function(x) MARGIN=c(3), sum(x, na.rm=TRUE)))

想法如何得到总和?谢谢

【问题讨论】:

  • as.list(apply(my.arrayNA, MARGIN=3, function(x) sum(x, na.rm=TRUE))) MARGIN 必须是apply() 的参数。或者简单地说:as.list(apply(my.arrayNA, MARGIN=3, FUN=sum, na.rm=TRUE))。甚至更短:as.list(apply(my.arrayNA, 3, sum, na.rm=TRUE))
  • 您现在有两个答案。因此,最终您希望通过单击投票旁边的按钮来接受答案。或者您可以评论为什么答案不是您想要的。

标签: arrays r apply


【解决方案1】:

如何将 NA 值转换为 0 的第一个:

my.arrayNA[is.na(my.arrayNA)] <- 0

【讨论】:

    【解决方案2】:
    as.list(apply(my.arrayNA, MARGIN=3, function(x) sum(x, na.rm=TRUE))) 
    

    MARGIN 必须是apply() 的参数!或者简单地说:

    as.list(apply(my.arrayNA, MARGIN=3, FUN=sum, na.rm=TRUE))
    

    甚至更短:

    as.list(apply(my.arrayNA, 3, sum, na.rm=TRUE))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 2015-07-26
      • 2017-04-09
      相关资源
      最近更新 更多