0

我正在查看基于抵达前几天的酒店房间的每日预订情况。

我认为预订速度会因星期几以及酒店 A 和酒店 B 的不同而有所不同,所以我想按这些类别进行分类。但是,当我分面(7 x 2 酒店=14 个方面)时,它除以日期总数而不是每个类别中的日期数。也就是说,我有 1400 个独特的 Date-Hotels,所以当我分面时,所有内容都被 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)

谢谢!

4

2 回答 2

0

这是你想要达到的目标吗?

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

在此处输入图像描述

于 2015-10-08T06:36:42.410 回答
0

一种方法是在制作图表之前简单地计算您想要绘制的内容。在您的情况下,您只需要计算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)

在此处输入图像描述

于 2015-10-08T23:35:02.357 回答