Ответ 1
как насчет:
rowMeans(cbind(a, b), na.rm=TRUE)
или
colMeans(rbind(a, b), na.rm=TRUE)
В R у меня есть два вектора:
a <- c(1, 2, 3, 4)
b <- c(NA, 6, 7, 8)
Как найти среднее по элементам два вектора, удалив NA, без цикла? т.е. я хочу получить вектор
(1, 4, 5, 6)
Я знаю функцию mean()
, я знаю аргумент na.rm = 1
. Но я не знаю, как соединить вещи. Разумеется, на самом деле у меня тысячи векторов с NA, появляющихся в разных местах, поэтому любое зависящее от размера решение не будет работать. Спасибо.
как насчет:
rowMeans(cbind(a, b), na.rm=TRUE)
или
colMeans(rbind(a, b), na.rm=TRUE)
Я не совсем уверен, что вы просите, но
apply(rbind(a,b),2,mean,na.rm = TRUE)
делать то, что вы хотите?
Решение 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