R, установите даты как общий день и час недели - PullRequest
0 голосов
/ 26 сентября 2018

Добрый день, у меня есть набор данных со значениями для каждого часа каждого дня недели за прошедший месяц, я хочу сравнить значения этой недели со значениями предыдущей недели и поместить их на график.Я использовал следующий код для создания формата даты:

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) как фиктивные значения) У меня было.

Я использовал заговор, чтобы получить диаграммы

  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")

Что я хочу сделать, это получить график, подобный следующему; Недельный график

Вместо того, что я получаю; Неперекрывающийся график

По оси X я хочу это сказать;Понедельник ЧЧ: ММ, так что я могу напрямую сравнивать одно значение с другим, и это указывает, на какое время мы смотрим.И я хочу, чтобы они перекрывали друг друга.Что-то вроде перевода дат в общую Неделю, без фактического месяца / дня.

Я ничего не нашел, любая помощь будет оценена.Спасибо

1 Ответ

0 голосов
/ 26 сентября 2018

Это можно немного убрать, скрыв данные "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()
  }
...