Як виправити в r: агрегатна функція відсутня, за замовчуванням «length»
Помилка, з якою ви можете зіткнутися під час використання R:
Aggregation function missing: defaulting to length
Ця помилка виникає, коли ви використовуєте функцію dcast у пакеті reshape2 для перетворення кадру даних із довгого формату на широкий формат , але в окремих клітинках широкого кадру даних можна розмістити кілька значень.
У наступному прикладі показано, як виправити цю помилку на практиці.
Як відтворити помилку
Припустимо, у R є наступний кадр даних, який містить інформацію про продажі різних продуктів:
#create data frame
df <- data. frame (store=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'),
promotion=c('Y', 'Y', 'N', 'N', 'Y', 'Y', 'N', 'N'),
product=c(1, 2, 1, 2, 1, 2, 1, 2),
sales=c(12, 18, 29, 20, 30, 11, 15, 22))
#view data frame
df
store promotion product sales
1 AY 1 12
2 AY 2 18
3 YEAR 1 29
4 YEAR 2 20
5 BY 1 30
6 BY 2 11
7 BN 1 15
8 BN 2 22
Тепер припустімо, що ми спробуємо використати функцію dcast для перетворення кадру даних із довгого формату на широкий:
library (reshape2)
#convert data frame to wide format
df_wide <- dcast(df, store ~ product, value. var = " sales ")
#view result
df_wide
Aggregation function missing: defaulting to length
store 1 2
1 to 2 2
2 B 2 2
Зверніть увагу, що функція dcast працює, але ми отримуємо попередження про відсутність агрегатної функції .
Як виправити помилку
Ми отримуємо попередження через те, що для кожної комбінації магазину та продукту існує два потенційних значення, які ми можемо використовувати для продажу .
Наприклад, для магазину А та продукту 1 вартість продажу може бути 12 або 29.
Отже, функція dcast за замовчуванням має значення «length» як функцію агрегації.
Наприклад, велика база даних повідомляє нам, що для магазину А та продукту 1 існує загалом 2 значення продажів.
Якщо ви хочете замість цього використовувати іншу функцію агрегації, ви можете використовувати fun.aggregate .
Наприклад, ми можемо використати такий синтаксис, щоб обчислити суму продажів за магазином і продуктом :
library (reshape2)
#convert data frame to wide format
df_wide <- dcast(df, store ~ product, value. var = " sales ", fun. aggregate =sum)
#view result
df_wide
store 1 2
1 A 41 38
2 B 45 33
Ось як інтерпретувати значення у великому кадрі даних:
- Сума продажів магазину А та продукту 1 дорівнює 41 .
- Сума продажів магазину А та продукту 2 дорівнює 38 .
- Сума продажів магазину B і продукту 1 дорівнює 45 .
- Сума продажів магазину B і продукту 2 дорівнює 33 .
Зауважте, що цього разу ми не отримуємо жодних попереджень, оскільки ми використали аргумент fun.aggregate .
Додаткові ресурси
У наступних посібниках пояснюється, як виправити інші типові помилки в R:
Як виправити в R: неочікувана рядкова константа
Як виправити в R: недійсна формула шаблону в ExtractVars
Як виправити в R: аргумент не є ні числовим, ні логічним: return na