Построение гистограммы значений времени, где ось X находится в диапазоне от 17:30 до 7:30. - PullRequest
0 голосов
/ 11 июля 2019

Я сделал этот вопрос воспроизводимым примером. Вот часть моего фрейма данных:

df <- structure(list(`Room Out Date` = c("2018-07-08", "2018-07-08", 
                "2018-07-08", "2018-07-09", "2018-07-09", "2018-07-09", "2018-07-09", 
                "2018-07-09", "2018-07-09", "2018-07-09", "2018-07-09", "2018-07-09", 
                "2018-07-10", "2018-07-10", "2018-07-10"), 
                `Room Out Time` = c("20:11:00", 
                "20:43:00", "22:28:00", "18:00:00", "18:32:00", "18:40:00", "18:59:00", 
                "19:16:00", "19:22:00", "19:38:00", "19:48:00", "21:24:00", "18:12:00", 
                "18:38:00", "18:40:00")), row.names = c(NA, -15L), 
                class = c("tbl_df", "tbl", "data.frame"))

Я хотел бы создать гистограмму с временами на оси x в диапазоне от 17:30 до 07:30binwidth из 30 минут) и рассчитывать на ось y. Я попытался преобразовать время, используя библиотеку chron, а также posixct, но ggplot не похоже ни на один из этих методов. Любая помощь очень ценится.

1 Ответ

1 голос
/ 11 июля 2019

Отредактировано: Теперь сопоставляются все даты по получасовому периоду

Попробуйте lubridate:

library(lubridate)

df %>%
  mutate(fakedate = ymd("2000-01-01")) %>%  # pretend all happen on same day
  mutate(fakedate_time = as_datetime(paste(fakedate, `Room Out Time`))) %>% 
  mutate(fakedate_time = as_datetime(ifelse(fakedate_time > as_datetime("2000-01-01 12:00:00"),
                                            fakedate_time,
                                            fakedate_time + days(1)))) %>%  # promote some to after midnight
  ggplot(aes(fakedate_time)) +
  geom_histogram(binwidth = 1800) +  # bins of 1800 seconds = 30 minutes
  xlim(as_datetime("2000-01-01 17:00:00"), as_datetime("2000-01-02 07:30:00"))

enter image description here

...