R count NA по группам

Может кто-нибудь объяснить, почему я получаю разные ответы, используя агрегатную функцию для подсчета пропущенных значений по группам? Кроме того, есть ли лучший способ подсчета пропущенных значений по группам с использованием встроенной функции R?

DF <- data.frame(YEAR=c(2000,2000,2000,2001,2001,2001,2001,2002,2002,2002), X=c(1,NA,3,NA,NA,NA,7,8,9,10))
DF

aggregate(X ~ YEAR, data=DF, function(x) { sum(is.na(x)) })
with(DF, aggregate(X, list(YEAR), function(x) { sum(is.na(x)) }))

aggregate(X ~ YEAR, data=DF, function(x) { sum(! is.na(x)) })
with(DF, aggregate(X, list(YEAR), function(x) { sum(! is.na(x)) }))

person user1491868    schedule 29.06.2014    source источник


Ответы (2)


На странице справки по адресу ?aggregate указано, что метод формулы имеет аргумент na.action, который по умолчанию установлен в na.omit.

na.action: функция, которая указывает, что должно произойти, если данные содержат NA значений. По умолчанию пропущенные значения в данных переменных игнорируются.

Вместо этого измените этот аргумент на NULL или na.pass, чтобы получить ожидаемые результаты:

# aggregate(X ~ YEAR, data=DF, function(x) {sum(is.na(x))}, na.action = na.pass)
aggregate(X ~ YEAR, data=DF, function(x) {sum(is.na(x))}, na.action = NULL)
#   YEAR X
# 1 2000 1
# 2 2001 3
# 3 2002 0
person A5C1D2H2I1M1N2O1R2T1    schedule 29.06.2014

person    schedule
comment
Это не отвечает на вопрос, как подсчитать NA во время агрегирования или группы по - person Jenks; 23.01.2019