2015-10-08 37 views
0

我正在查看以抵達前日子爲基礎的酒店房間的每日預訂。使用geom_bar來表示平均值

我認爲預訂速度因星期幾和酒店A和酒店B而異,所以我想按照這些類別分類。但是,當我面向(7 x 2酒店= 14個方面)時,它將按日期總數除以每個類別中的日期數量。也就是說,我有1400個獨特的日期酒店,所以當我面向時,所有東西都被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) 

謝謝!

+1

您可以加入一個可重複的數據,你的問題? – jazzurro

+0

這應該工作:DaysBeforeArrival = rep(1:5,8);酒店=代表(LETTERS [1:2],20); DayOfWeek = c(rep(1,10),rep(2,10),rep(1,10),rep(2,10)); (代表「1月1日」,10),代表(「1月2日」,10),代表(「1月8日」,10),代表(「1月9日」 預訂=(樣本(1:40)); Date_HotelID = paste(Hotel,Dates,sep =「 - 」); df = data.frame(DaysBeforeArrival,Hotel,DayOfWeek,Dates,bookings,Date_HotelID) – Sam

回答

0

這是你想達到的目的嗎?

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

enter image description here

+0

我需要顯示一個典型的日子(例如,在每個方面窗口中除以Date_HotelID的數量,而不是除以Date_HotelID的總數量) – Sam

0

一種方法是簡單地計算出你想之前,使圖形繪製什麼。在你的情況下,你只需要計算每個DayOfWeek/Hotel組合的唯一Date_HotelID的數量,然後將bookings除以每行的該值。

例如,我可能使用dplyr中的函數執行此操作。注意我使用n_distinct,這是length(unique(...))dplyr版本。

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) 

enter image description here