Я работаю над файлом данных, который содержит информацию о продажах товаров из различных сетей магазинов, например. супермаркеты.
(Взято из этого набора данных на случай, если кто-то знаком).
Файл содержит несколько полей:
- id - уникальный идентификатор клиента
- chain - идентификатор сети магазинов
- отдел - совокупная группировка категории (например, вода)
- категория - категория продукта (например, газированная вода)
- company - Идентификатор компании, которая продает товар
- brand - идентификатор бренда, которому принадлежит товар
- дата - дата покупки
- productsize - сумма покупки продукта (например, 16 унций воды)
- productmeasure - Единицы покупки продукта (например, унции)
- количество закупок - Количество приобретенных единиц
- purchaseamount - долларовая сумма покупки
- productprice - Цена товара (определяется по количеству покупок / количеству закупок)
Я хочу рассчитать среднюю цену по набору данных транзакций для каждого продукта.
Для этого упражнения я предполагаю, что я могу определить уникальный продукт по следующим полям: категория, марка, размер продукта, чтобы любой уникальный продукт соответствовал уникальной комбинации этих 3 полей.
Итак, сначала я идентифицирую уникальные элементы в наборе данных, чтобы получить список всех продуктов:
#transactions is the name of the data frame
items <- unique(transactions %>% select(category, brand, productsize))
Теперь я могу использовать это в качестве справочной таблицы для выбора уникальных продуктов из набора данных транзакций и получения средней цены для каждого из них.
Поскольку я новичок, мне удалось заставить его работать только с (не совсем элегантно) для цикла :
for (i in 1:nrow(items)) {
temp1 <- filter(transactions, category==items[i,1])
temp2 <- filter(temp1, brand==items[i,2])
temp3 <- filter(temp2, productsize==items[i,3])
items$meanvalue[i]<- mean(temp3$productprice)
}
Это работает, но, конечно, это очень медленно. Во фрейме данных транзакция имеется 480612 записей, а во фрейме данных items - 56658. У меня нет опыта работы с большими наборами данных, но я уверен, что проблема связана с кодом, не так большой размер.
Пример файла (300 строк) в pastebin .
РЕДАКТИРОВАТЬ: Обнаружил, что summarise
очень хорошо работает с этим!
avgPrice <- transactions %>% group_by(category, brand, productsize) %>% summarise(avgPrice = mean(productprice))