2015-10-07 2 views
1

все! Я попытался найти похожий вопрос, но я этого не сделал. Давайте предположим, что у нас есть простой кадр данных, как этотКак применять пользовательскую функцию в совокупности R

enter image description here

мне нужно объединить по группе: aggregate(value~group, data=data, mean,na.rm=TRUE) Но, когда я использую na.rm=TRUE, группа 1 исчезает. Абсолютно необходимо использовать na.rm=TRUE, потому что в противном случае я получу неверные средние значения. Я также попытался использовать пользовательскую функцию:

customMean<-function(x){ 
    if (all(is.na(x))){ 
     return (NA_integer_) 
    } else { 
    return(mean(x,na.rm=TRUE)) 
    } 
} 

но, результат такой же. Кто-нибудь знает, как исправить эту проблему? Я ожидаю, что окончательный результат будет следующим: enter image description here. Поблагодарили

ответ

1

По умолчанию метод формулы aggregate имеет na.action=na.omit. Таким образом, он удаляет всю строку, если есть значение NA. Мы можем изменить его на na.action=NULL, и он должен работать.

aggregate(value~group, data=data, mean,na.rm=TRUE, na.action=NULL) 
# group value 
#1  1 NaN 
#2  2 2.5 
+1

Как насчет 'агрегатных (данные [2], список (данные $ группа), среднее значение)' –

+1

@RonakShah Он должен работать. Метод формулы имеет этот параметр. – akrun

+1

Удивительный! Большое спасибо! – user2545517

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