A: як використовувати aggregate() і не видаляти рядки за допомогою na


Ви можете використовувати функцію Aggregate() у R, щоб обчислити підсумкову статистику для змінних у кадрі даних.

За замовчуванням, якщо функція Aggregate() зустрічає рядок у кадрі даних з одним або кількома значеннями NA, вона просто видаляє рядок під час виконання обчислень.

Це може призвести до несподіваних наслідків під час виконання обчислень.

Щоб уникнути такої поведінки, ви можете використовувати аргумент na.action=NULL у функції Aggregate() .

У наступному прикладі показано, як використовувати цей аргумент на практиці.

Приклад: використовуйте aggegate() у 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

Отже, команда С повинна мати 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

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *