【问题标题】:How to average every 3 columns with NA in R如何在 R 中用 NA 平均每 3 列
【发布时间】:2017-04-05 17:52:01
【问题描述】:

我有一个 NA 矩阵,我想找到每行每 3 列的平均值。

set.seed(100)
a <- matrix(sample(c(NA, 1:4), 90, replace = TRUE), 10)

如果我使用

t(apply(a, 1, tapply, gl(3, 3), mean))

代码无法找到包括 NA 在内的列的平均值。我想知道如何修改代码。非常感谢。

【问题讨论】:

  • t(apply(a, 1, tapply, gl(3, 3), mean, na.rm = TRUE))
  • 我是个白痴,哈哈,谢谢。

标签: r matrix average


【解决方案1】:

我们也可以通过转换为 3D 数组来做到这一点,然后在循环第三个 MARGIN 后得到rowMeans

res <- apply(array(a, c(nrow(a), 3, 3)), 3, rowMeans, na.rm = TRUE)
all.equal(res, t(apply(a, 1, tapply, gl(3, 3), 
       mean, na.rm = TRUE)), check.attributes = FALSE)
#[1] TRUE

【讨论】:

  • 感谢您的帮助。 c(nrow(a), 3, 3) 是什么意思?谢谢。
  • @YangYang 3D 数组有 3 个维度,其中第一个是行、第二列和第三个维度。这里,行数与原始矩阵的行数相同。所以我把它指定为nrow(a),接下来是3,因为我们希望每个数组切片中只有3列
  • 非常感谢您的帮助!
猜你喜欢
  • 2012-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-14
  • 1970-01-01
  • 2019-08-19
  • 2013-03-09
相关资源
最近更新 更多