R中的元素均值

Posted

技术标签:

【中文标题】R中的元素均值【英文标题】:Element-wise mean in R 【发布时间】:2011-03-30 16:11:14 【问题描述】:

在 R 中,我有两个向量:

a <- c(1, 2, 3, 4)
b <- c(NA, 6, 7, 8)

如何在没有循环的情况下找到两个向量的元素平均值,去除 NA?即我想得到 ​​p> 的向量

(1, 4, 5, 6)

我知道函数mean(),我知道参数na.rm = 1。但我不知道如何把东西放在一起。可以肯定的是,实际上我有数千个带有 NA 的向量出现在不同的地方,所以任何与维度相关的解决方案都行不通。谢谢。

【问题讨论】:

【参考方案1】:

怎么样:

rowMeans(cbind(a, b), na.rm=TRUE)

colMeans(rbind(a, b), na.rm=TRUE)

【讨论】:

好的,这些很酷。但是要得到我想要的,你仍然需要添加na.rm = 1,这样就解决了我的问题。谢谢。 我刚刚添加了 na.rm 参数。 colSumsrowSums 也存在 @Zhang18,仅供参考。 将其推广到高维数组类似于:apply(abind(a, b, along=0), c(2,3,4), mean, na.rm=TRUE)(如果 a 和 b 是 3 维开始的)。【参考方案2】:

我不确定您要的是什么,但确实

apply(rbind(a,b),2,mean,na.rm = TRUE)

做你想做的事?

【讨论】:

?colMeans 和 ?rowMeans 的详细信息部分解释说,这些函数比应用 fun = mean 快得多,因为它们是为了速度而实现的。【参考方案3】:

一个tidyverse解决方案使用purrr

library(purrr)
a <- c(1, 2, 3, 4)
b <- c(NA, 6, 7, 8)

# expected:
c(1, 4, 5, 6) 
#> [1] 1 4 5 6

# actual:
map2_dbl(a,b, ~mean(c(.x,.y), na.rm=T)) # actual
#> [1] 1 4 5 6

对于任意数量的向量:

>  pmap_dbl(list(a,b, a, b), compose(partial(mean, na.rm = T), c))
 [1] 1 4 5 6

【讨论】:

以上是关于R中的元素均值的主要内容,如果未能解决你的问题,请参考以下文章

如何在R中的ggplot2中绘制组均值的平均值?

在 R 中使用 ROLLING 平均值估算缺失值

R中的聚合平均值

如何在r中的循环中引导加权平均值

R中的k均值返回值

计算R中的年度总和和平均值[重复]