2010-08-16 4 views
23

В R, у меня есть два вектора:поэлементно означают в R

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

Как найти поэлементное среднее из двух векторов, удаления NA, без цикла? то есть я хочу, чтобы получить вектор

(1, 4, 5, 6) 

Я знаю функцию mean(), я знаю, что аргумент na.rm = 1. Но я не знаю, как соединить вещи. Разумеется, на самом деле у меня тысячи векторов с NA, появляющихся в разных местах, поэтому любое зависящее от размера решение не будет работать. Благодарю.

ответ

31

как насчет:

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

или

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

Хорошо, это круто. Но чтобы получить то, что я хотел, вам все равно нужно добавить 'na.rm = 1', и это решает мою проблему. Спасибо. – Zhang18

+0

Я только что добавил аргументы na.rm. – Greg

+0

'colSums' и' rowSums' также существуют @ Zhang18, FYI. – Vince

3

Я не совсем уверен, что вы просите, но

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

делать то, что вы хотите?

+0

Да, это тоже работает. спасибо. – Zhang18

+6

В разделе «Подробности» ColMeans и? RowMeans объясняется, что эти функции намного быстрее, чем применяются с fun = mean, поскольку они реализованы для скорости. – Greg

 Смежные вопросы

  • Нет связанных вопросов^_^