我根据抵达前几天查看酒店房间的每日预订。
我认为预订的速度因星期几以及酒店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)
谢谢!
答案 0 :(得分:0)
这是你想要达到的目标吗?
library(ggplot2)
ggplot(mydf,aes(DaysBeforeArrival,bookings/length(unique(Date_HotelID))))+
geom_bar(stat="identity") + facet_wrap(~Hotel~DayOfWeek)
答案 1 :(得分:0)
一种方法是在制作图表之前简单地计算您想要绘制的内容。在您的情况下,您只需要为每个Date_HotelID
/ DayOfWeek
组合计算唯一Hotel
的数量,然后将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)