Как построить оператор цикла / if, который удовлетворяет нескольким условиям одновременно? - PullRequest
0 голосов
/ 13 мая 2019

У нас есть большой набор данных с 150 пивными брендами, которые продаются в 85 магазинах за 399 недель. Марки по-прежнему подразделяются на суббренды (например, бренд = Budweiser, но суббренды все еще существуют: Budweiser light / Budweiser регулярно и т. Д.) Мы хотим создать функцию, которая создает новый столбец, который дает нам среднюю цену за бренд, если: - бренд такой же, - неделя такая же и - магазин такой же.

Таким образом, наша цель - получить столбец, который отображает 1 среднюю цену за бренд в неделю в магазине (например, Budweiser в магазине 1 на неделе 1). Мы изо всех сил пытаемся создать это оператор if / loop, поскольку мы довольно плохо знакомы с R.

До сих пор мы пытались решить этот шаг, понимая, как он будет работать без цикла. Поэтому мы выбрали конкретный магазин, марку и неделю и создали вектор из них. Таким образом, мы могли бы создать вектор mean_price, который суммирует все цены в неделю на магазин всех суббрендов, а затем делит их на количество суббрендов (рассчитывается путем суммирования вектора из них).

try1 <- subset(beer, select = c("brand","week","store","price_ounce","logprice_ounce", "sales_ounce","logsales_ounce"))

try1$vector <- c(1)

store5 <- subset(try1, store==5 & week==224 & brand=="ariel")
mean_price <- (sum(store5$logprice_ounce)/(sum(store5$vector)))
View(mean_price)
``

So far this leads to only one mean price, but we would like to have a column that displays 1 mean price per brand & store & week.
In the end, we need this to perform a regression to estimate price elasticities per store.

We are looking forward to any kind of help as we are completely lost.
Thank you in advance!

Ответы [ 2 ]

0 голосов
/ 13 мая 2019

На самом деле вам не нужен цикл, чтобы делать то, что вы хотите.Вы можете, например, использовать библиотеку data.table

library(data.table)    
beer[, Mean:=mean(price_ounce), by=list(brand,week,store)]

Вы можете сделать это с другой библиотекой под названием dplyr , но я рекомендую вам взглянуть на data.table , что быстрее при работе с большими наборами данных.

Надеюсь, это поможет вам.

0 голосов
/ 13 мая 2019

Библиотека Dplyr отлично подходит для такого анализа. Вы можете получить среднее значение для магазина / бренда / пива в dplyr, используя:

library(dplyr)

brand <- c("bud", "bud", "bud")
week <- c(1,1,1)
store <- c("A", "A", "A")
price_ounce <- c(2,3,2.2)

data <- data.frame(brand, week, store, price_ounce) %>%
  mutate(logprice_ounce = log(price_ounce))

answer <- data %>% 
  group_by(brand, week, store) %>%
  summarise(meanPrice = mean(price_ounce),
            geomMeanPrice = exp(mean(logprice_ounce)))

Вы можете найти эту книгу полезной: R для Data Science

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...