Как исправить в R: агрегатная функция отсутствует, по умолчанию используется «длина»


Одна ошибка, с которой вы можете столкнуться при использовании 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 A Y 1 12
2 A Y 2 18
3 A N 1 29
4 A N 2 20
5 B Y 1 30
6 B Y 2 11
7 B N 1 15
8 B N 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 A 2 2
2 B 2 2

Обратите внимание, что функция dcast работает, но мы получаем предупреждающее сообщение об отсутствии функции агрегирования .

Как исправить ошибку

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

Например, для магазина А и продукта 1 стоимость продажи может быть 12 или 29.

Таким образом, функция dcast по умолчанию использует «длину» в качестве агрегатной функции.

Например, широкий фрейм данных говорит нам, что для магазина А и продукта 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: аргумент не является числовым или логическим: возвращается na

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.