34

在 R 中,我有两个向量:

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

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

(1, 4, 5, 6)

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

4

3 回答 3

41

怎么样:

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

或者

colMeans(rbind(a, b), na.rm=TRUE)
于 2010-08-16T21:27:31.040 回答
3

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

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

做你想做的事?

于 2010-08-16T21:33:03.207 回答
1

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
于 2019-10-14T10:15:02.107 回答