Одна ошибка, с которой вы можете столкнуться при использовании 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