我有一个表格,其中包含对restaurants
(由 ID 标识)分数的观察。变量mean
是在以每天为中心的一周窗口中收到的评论的平均评分(即从前 3 天到 3 天后),变量count
是在同一窗口中收到的评论数量(参见下面的代码adput
我的数据框的随机生成样本)。
我有兴趣查看那些在任一变量中都包含大峰值的餐厅(比如突然间他们的平均评分上升了很多,或者突然下降了)。对于那些餐馆,我想通过绘制分布来调查发生了什么(我有很多餐馆,所以我不能手动进行,我必须限制我的域以进行半手动检查)。
此外,由于我的数据是每天的,我希望它不那么精细。特别是,我想在一个值中平均给定月份的所有评级或计数。
我认为动物园应该帮助我做得很好:给定示例中的数据框,我想我可以将其转换为动物园时间序列,该时间序列以我想要的方式聚合并通过使用以下方式拆分我想要的方式:
z <- read.zoo(df, split = "restaurantID",
format = "%m/%d/%Y", index.column = 2, FUN = as.yearmon, aggregate = mean)
但是,在 restaurantID 上拆分不会产生预期的结果。我得到的是很多 NA:
mean.1006054 count.1006054 mean.1006639 count.1006639 mean.1006704 count.1006704 mean.1007177 count.1007177
Lug 2004 NA NA NA NA NA NA NA NA
Ago 2004 NA NA NA NA NA NA NA NA
Nov 2004 NA NA NA NA NA NA NA NA
Gen 2005 NA NA NA NA NA NA NA NA
Feb 2005 NA NA NA NA NA NA NA NA
Mar 2005 NA NA NA NA NA NA NA NA
mean.1007296 count.1007296 mean.1007606 count.1007606 mean.1007850 count.1007850 mean.1008272 count.1008272
Lug 2004 NA NA NA NA NA NA NA NA
Ago 2004 NA NA NA NA NA NA NA NA
Nov 2004 NA NA NA NA NA NA NA NA
Gen 2005 NA NA NA NA NA NA NA NA
Feb 2005 NA NA NA NA NA NA NA NA
Mar 2005 NA NA NA NA NA NA NA NA
请注意,如果我不在 restaurantID 列上拆分它,它会起作用。
df$website <- NULL
> z <- read.zoo(df, format = "%m/%d/%Y", index.column = 2, FUN = as.yearmon, aggregate = mean)
> head(z)
restaurantID mean count
Lug 2004 1418680 3.500000 1
Ago 2004 1370457 5.000000 1
Nov 2004 1324645 4.333333 1
Gen 2005 1425933 1.920000 1
Feb 2005 1315289 3.000000 1
Mar 2005 1400577 2.687500 1
此外,plot.zoo(z)
有效,但生成的图表对我来说当然没有意义。
我的问题是:
1) 如何筛选在任一列中具有较高“月-月”峰值的餐厅?
2)如何拆分 restaurantID 并仅绘制此类餐厅的时间序列?