A: как использовать aggregate() и не удалять строки с помощью na
Вы можете использовать функцию Aggregate() в R для расчета сводной статистики для переменных в фрейме данных.
По умолчанию, если функция Aggregate() обнаруживает строку во фрейме данных с одним или несколькими значениями NA, она просто удалит эту строку при выполнении вычислений.
Это может привести к неожиданным последствиям при выполнении расчетов.
Чтобы избежать такого поведения, вы можете использовать аргумент na.action=NULL в функции Aggregate() .
В следующем примере показано, как использовать этот аргумент на практике.
Пример: используйте aggate() в R и не удаляйте строки с NA.
Предположим, у нас есть следующий фрейм данных в R, который показывает очки и передачи баскетболистов из разных команд:
#create data frame df <- data. frame (team=c('A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'), points=c(5, 9, 12, 14, 14, 13, 10, 6, 15, 18), assists=c(NA, 4, 4, 5, 3, 6, 8, 4, 10, NA)) #view data frame df team points assists 1 to 5 NA 2 to 9 4 3 to 12 4 4 to 14 5 5 A 14 3 6 B 13 6 7 B 10 8 8 B 6 4 9 C 15 10 10 C 18 NA
Теперь предположим, что мы пытаемся использовать функцию Aggregate() для расчета суммы очков и передач , сгруппированных по командам :
#attempt to calculate sum of points and assists, grouped by team aggregate(. ~ team, data=df, FUN=sum, na. rm = TRUE ) team points assists 1 A 49 16 2 B 29 18 3 C 15 10
Кажется, что результат показывает нам сумму очков и передач на команду, но строки со значениями NA фактически были удалены при выполнении этих расчетов.
Мы можем подтвердить это, посмотрев на исходный фрейм данных и увидев, что команда C имеет два значения в столбце очков :
- 15
- 18
Итак, команда C должна иметь в общей сложности 33 очка, но результат показывает только 15.
Это связано с тем, что строка со значением очков 18 имеет значение NA в столбце передач , что означает, что эта строка фактически не использовалась при расчете суммы очков команды по сравнению с
Чтобы гарантировать, что строки со значениями NA не удаляются при выполнении вычислений, нам нужно использовать аргумент na.action=NULL следующим образом:
#calculate sum of points and assists, grouped by team (don't drop NA rows) aggregate(. ~ team, data=df, FUN=sum, na. rm = TRUE , na. action =NULL) team points assists 1 A 54 16 2 B 29 18 3 C 33 10
Обратите внимание, что функция Aggregate() на этот раз корректно возвращает сумму значений очков для команды C, равную 33.
Примечание . Аргумент na.rm=TRUE указывает, что значения NA следует игнорировать при выполнении вычислений в определенном столбце.
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные задачи в R:
Как использовать функцию summary() в R
Как рассчитать среднее значение на группу в R
Как рассчитать описательную статистику в R