R,将日期设置为通用的星期几和小时

R, Set dates as generic day and hour of week

美好的一天,我有一个数据集,其中包含过去一个月一周中每一天的每小时的值,我想将本周的值与前一周的值进行比较,并将它们放在阴谋。 我使用以下代码创建日期格式;

WeekDate <- seq(from=as.POSIXct("2018-09-19 0:00", tz="UTC"),
to=as.POSIXct("2018-09-25 23:00", tz="UTC"), by="hour")

PreviousWeekDate <- seq(from=as.POSIXct("2018-09-12 0:00", tz="UTC"),
to=as.POSIXct("2018-09-18 23:00", tz="UTC"), by="hour")

然后我将它与我的值合并(我们可以使用 y1 = (0:167) 和 y2 = (1:168) 作为虚拟值)。

我用 plotly 来获取图表

  plot_ly() %>%
add_lines(x = WeekDate, y = y1, name = "2018-09-19 to 2018-09-25") %>%
add_lines(x = PreviousWeekDate, y = y2, name = "2018-09-12 to 2018-09-19")

我想做的是得到如下图这样的情节;Week plot

而不是我得到的那个;Non Overlapped Graph

我想在 X 轴上表示;星期一 HH:MM,因此我可以直接将一个值与另一个值进行比较,从而指示我们正在查看的时间。我希望它们重叠。类似于将日期转换为通用周,没有实际的 month/day.

我还没有找到任何东西,任何帮助将不胜感激。 谢谢

这可以通过隐藏工具提示中的 "time_norm" 数据来稍微清理一下,但我认为它基本上可以满足您的需求。

library(tidyverse); library(lubridate); library(plotly)
df <- data_frame(
  time = seq(from=as.POSIXct("2018-09-12 0:00", tz="UTC"),
                  to=as.POSIXct("2018-09-25 23:00", tz="UTC"), by="hour")) %>%
  rowid_to_column(var = "y") %>%
  mutate(week      = if_else(time > max(time) - ddays(7), "This week", "Last week"),
         time_norm = if_else(time > max(time) - ddays(7), time, time + ddays(7)))

ggplotly( 
  { 
  ggplot(df, aes(time_norm, y, color = week, label = norm)) +
  geom_line()
  }