Разделение значений в каждой ячейке на среднее по группе в R - PullRequest
0 голосов
/ 16 января 2019

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

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

hotel = c(rep("Hilton",3), rep("Caesar",3))
date1 = c(rep('2018-01-01',2), '2018-01-02', rep('2018-01-01',3))
dba = c(2,0,1,3,2,1)
sales = c(3,5,7,5,2,3)
df = data.frame(cbind(hotel, date1, dba, sales))

df1 = df %>%
  group_by(date1, hotel) %>%
  dplyr::summarise(avg = mean(sales)) %>%
  acast(., date1~hotel)

Любое предложение будет высоко оценено!

1 Ответ

0 голосов
/ 16 января 2019

Вместо суммирования мы можем использовать mutate. После группировки по 'date1', 'hotel', разделите 'sales' на mean of 'sales', чтобы создать новый столбец

library(tidyverse)
df %>% 
   group_by(date1, hotel) %>% 
   mutate(SalesDividedByMean = sales/mean(sales))

ПРИМЕЧАНИЕ. Если столбцы имеют разные значения type с, то результаты cbind в matrix и matrix могут иметь только один тип. Таким образом, вектор класса character может изменить все данные на character. Оборачивая data.frame, распространяйте это изменение либо на factor (по умолчанию stringsAsFactors = TRUE, либо на `символ)

данные

df <- data.frame(hotel, date1, dba, sales)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...