R 如何将日期列表按周分类,并绘制每周计数的柱状图

R 如何将日期列表按周分类,并绘制每周计数的柱状图,r,date,ggplot2,histogram,binning,R,Date,Ggplot2,Histogram,Binning,我有一个数据框dates,它包含日期列表。我正试图制作一个列表的绘图,日期为t2美元,以周为单位。i、 e.连续一周内有多少个日期 我希望每个装箱周都有一个标签,格式为11月1日、11月8日,…,范围限于列表中的“最小”和“最大”最早和最晚日期 到目前为止,我已经创建了一个dataframe,其中包含我想要存储的日期列表、data$t2以及我假设的一系列列!我需要创建我的x标签: library(lubridate) dates$t1 <- c("24/07/2015", "12/08/

我有一个数据框dates,它包含日期列表。我正试图制作一个列表的绘图,日期为t2美元,以周为单位。i、 e.连续一周内有多少个日期

我希望每个装箱周都有一个标签,格式为11月1日、11月8日,…,范围限于列表中的“最小”和“最大”最早和最晚日期

到目前为止,我已经创建了一个dataframe,其中包含我想要存储的日期列表、data$t2以及我假设的一系列列!我需要创建我的x标签:

library(lubridate)

dates$t1 <- c("24/07/2015", "12/08/2015", "10/08/2015", "05/09/2015", "20/09/2015", 
"23/09/2015", "07/09/2015", "04/11/2015", "03/11/2015", "14/10/2015", 
"08/10/2015", "14/09/2015", "02/10/2015", "28/09/2015", "23/10/2015", 
"02/11/2015", "28/11/2015", "06/12/2015", "10/12/2015", "08/12/2015", 
"07/12/2015", "03/12/2015", "21/11/2015", "02/12/2015", "12/12/2015", 
"28/12/2015", "13/01/2016", "14/01/2016", "03/01/2016", "24/01/2016"
)

dates$t1 <- dmy(dates$t1)
dates$t2 <- dates$t1 + years(1)
dates$day = day(dates$t2)
dates$week = isoweek(dates$t2)
dates$month = month(dates$t2, label = TRUE)
dates$year = year(dates$t2)

dates <- na.omit(dates)
是否有人能够建议如何:

将x轴上的周数替换为日-月,例如01-Nov格式? 告诉ggplot,周数跨越两个不同年份,例如1-10属于2017年初,而不是2016年初的当前显示。 将x轴限制设置为列表中最早和最晚的日期,而不是全年。
我还是个新手,非常感谢您的帮助,谢谢

您可以制作包含每年每周第一个日期的周日历:

library(dplyr)
data.frame(date=seq(as.Date("2015/1/1"), as.Date("2016/12/31"), by="day")) %>% 
  mutate(week=isoweek(date),year=year(date)) %>%
  group_by(year,week) %>% 
  summarise(weekdate=min(date)) -> week_calendar
然后将其与data.frame合并

dates <- merge(dates,week_calendar)

这很好用,谢谢@HubertL!为了让其他新来的糊涂人更完整。。。如果x标签重叠且不可读,可以在ggplot中添加以下行以旋转它们:+themeaxis.text.x=element\u textangle=90
library(dplyr)
data.frame(date=seq(as.Date("2015/1/1"), as.Date("2016/12/31"), by="day")) %>% 
  mutate(week=isoweek(date),year=year(date)) %>%
  group_by(year,week) %>% 
  summarise(weekdate=min(date)) -> week_calendar
dates <- merge(dates,week_calendar)
library(ggplot2)
ggplot(dates, aes(x = weekdate)) +
  geom_bar()+
  scale_x_date(date_breaks = "1 week", date_labels = "%d-%b")+
  theme(axis.text.x = element_text(angle = 90))