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 参数。
colSums
和 rowSums
也存在 @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中的元素均值的主要内容,如果未能解决你的问题,请参考以下文章