Использование geom_bar для представления средних значений

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

Я думаю, что скорость бронирования зависит от дня недели и отеля A и отеля B, поэтому я хотел бы разделить по этим категориям. Однако при I аспекте (7 x 2 отеля = 14 аспектов) он делится на общее количество дат, а не на количество дат в каждой категории. То есть у меня 1400 уникальных Date-отелей, поэтому все делится на 1400, а не примерно на 100, когда я граню. Я хотел бы, чтобы мой код делился на 97 103 101 в зависимости от того, сколько отелей-дат у меня есть в каждом аспекте, чтобы я мог представить «типичный» шаблон бронирования.

Вот мои текущие данные и код:

DaysBeforeArrival=rep(1:5,8)
Hotel=rep(LETTERS[1:2],20)
DayOfWeek=c(rep(1,10),rep(2,10),rep(1,10),rep(2,10))
Dates=c(rep("Jan-1",10),rep("Jan-2",10),rep("Jan-8",10),rep("Jan-9",10))
bookings=(sample(1:40))
Date_HotelID=paste(Hotel,Dates,sep="-")
mydf=data.frame(DaysBeforeArrival,Hotel,DayOfWeek,Dates,bookings,Date_HotelID)


ggplot(mydf,aes(DaysBeforeArrival,bookings/length(unique(Date_HotelID)))+
geom_bar(stat=identity)  +
facet_grid(DayofWeek~HotelID)

Спасибо!


person Sam    schedule 08.10.2015    source источник
comment
Не могли бы вы добавить воспроизводимые данные к вашему вопросу?   -  person jazzurro    schedule 08.10.2015
comment
Это должно работать: DaysBeforeArrival=rep(1:5,8); Отель=реп(ПИСЬМА[1:2],20); DayOfWeek=c(повторение(1,10),повторение(2,10),повторение(1,10),повторение(2,10)); Dates=c(rep(1,10 января),rep(2,10 января),rep(8,10 января),rep(9,10 января)); бронирование = (образец (1:40)); Date_HotelID=вставить(Отель,Даты,сен=-); df=data.frame(DaysBeforeArrival,Hotel,DayOfWeek,Dates,bookings,Date_HotelID)   -  person Sam    schedule 08.10.2015


Ответы (2)


Это то, чего вы хотели добиться?

library(ggplot2)
ggplot(mydf,aes(DaysBeforeArrival,bookings/length(unique(Date_HotelID))))+
         geom_bar(stat="identity")  + facet_wrap(~Hotel~DayOfWeek)

введите здесь описание изображения

person Mateusz1981    schedule 08.10.2015
comment
Мне нужно показать типичный день (например, разделить на количество Date_HotelID в каждом фасетном окне вместо деления на общее количество Date_HotelID) - person Sam; 08.10.2015

Один из подходов состоит в том, чтобы просто вычислить то, что вы хотите изобразить, прежде чем строить график. В вашем случае вам просто нужно рассчитать количество уникальных Date_HotelID для каждой комбинации DayOfWeek/Hotel, а затем разделить bookings на это значение для каждой строки.

Например, я могу сделать это с помощью функций из dplyr. Примечание. Я использую n_distinct, который является dplyr версией length(unique(...)).

library(dplyr)
mydf3 = mydf %>%
    group_by(DayOfWeek, Hotel) %>% 
    mutate(book.speed = bookings/n_distinct(Date_HotelID))
mydf3

Source: local data frame [40 x 7]
Groups: DayOfWeek, Hotel [4]

   DaysBeforeArrival  Hotel DayOfWeek  Dates bookings Date_HotelID book.speed
               (int) (fctr)     (dbl) (fctr)    (int)       (fctr)      (dbl)
1                  1      A         1  Jan-1        5      A-Jan-1        2.5
2                  2      B         1  Jan-1       34      B-Jan-1       17.0
3                  3      A         1  Jan-1       20      A-Jan-1       10.0
4                  4      B         1  Jan-1       11      B-Jan-1        5.5
5                  5      A         1  Jan-1       13      A-Jan-1        6.5
6                  1      B         1  Jan-1       38      B-Jan-1       19.0
7                  2      A         1  Jan-1        7      A-Jan-1        3.5
8                  3      B         1  Jan-1       15      B-Jan-1        7.5
9                  4      A         1  Jan-1       22      A-Jan-1       11.0
10                 5      B         1  Jan-1       14      B-Jan-1        7.0
..               ...    ...       ...    ...      ...          ...        ...

Просто сделайте свой график с расчетными данными.

ggplot(mydf3, aes(DaysBeforeArrival, book.speed)) +
    geom_bar(stat="identity")  +
    facet_grid(DayOfWeek ~ Hotel)

введите здесь описание изображения

person aosmith    schedule 08.10.2015