Есть ли функция для определения переменной времени в R? - PullRequest
1 голос
/ 01 ноября 2019

У меня есть переменная времени и другие переменные. Я хочу определить свою первую переменную как время и использовать ggplot, чтобы получить хороший график для двух других переменных относительно времени.

Я не пробовал какой-либо код, потому что застрял в том, как выяснить,что я хочу. Тем не менее, вот (код Идеи), который может имитировать то, что я хочу, и до этого есть 15 ряд моих данных:

data <- structure(list(ATime = structure(1:15, .Label = c("00:00", "00:05",
                                                   "00:10", "00:15", "00:20", "00:25", "00:30", "00:35", "00:40", 
                                                   "00:45", "00:50", "00:55", "01:00", "01:05", "01:10", "01:15", 
                                                   "01:20", "01:25", "01:30", "01:35", "01:40", "01:45", "01:50", 
                                                   "01:55", "02:00", "02:05", "02:10", "02:15", "02:20", "02:25"), class = "factor"), 
                                                      ASpeed5 = c(34, 40, 38, 55, 56, 60, 66, 49, 48, 29, 67, 78, 
                                                      39, 53, 73), BSpeed5 = c(23, 46, 63, 64, 72, 61, 49, 48, 
                                                      63, 68, 62, 27, 35, 45, 59)), row.names = c(NA, 15L), class = "data.frame")


data$ATime <- as.time(data$ATime)
ggplot(data, aes(x = ATime, y1 = ASpeed5, y2 = BSpeed5))+
  geom_line(color = y1, y2)

Я ожидаю две линии с разными цветами для каждой скорости (у-ось) относительно времени (ось х)

Ответы [ 2 ]

2 голосов
/ 01 ноября 2019

Это базовый пример R, но если вы часто работаете со временем, я бы порекомендовал пакет lubridate. В этом примере я преобразовываю переменную ATime в класс Date. Вы захотите установить свой часовой пояс (tz), если используете реальные данные, но я по умолчанию установил здесь стандарт.

data$ATime <- as.POSIXct(as.character(data$ATime), format="%R", tz="UTC")

data %>% 
  ggplot(aes(x=ATime)) + 
  geom_line(aes(y=ASpeed5, col=1)) +
  geom_line(aes(y=BSpeed5, col=2)) +
  ylab("Speed") + xlab("Time")

enter image description here

Редактировать, чтобы показать подмножество данных

Для отображения подмножества данных вы можете использовать фильтр. В этом случае я вызываю все данные, если время «меньше» отметки 00:10:00. Как и все условные операторы, это читается как больше или меньше, но когда переменная имеет формат даты, вы можете думать о ней как о более ранней или более поздней, чем.

data %>% 
  filter(ATime <= "2019-11-01 00:10:00") %>% 
  ggplot(aes(x=ATime)) + 
  geom_line(aes(y=ASpeed5, col=1)) +
  geom_line(aes(y=BSpeed5, col=2)) +
  ylab("Speed") + xlab("Time")

NEW EDIT, чтобы показать полностью24-часовое окно с указанными галочками оси enter image description here

Ваш комментарий звучит так, как будто вы хотите визуализировать весь 24-часовой период с установленными перерывами. Вы не указали интервал, поэтому я выбираю 4 часа. Это изображение плохо масштабируется, поскольку данные появляются только в первый час. Обязательно используйте соответствующую шкалу для ваших визуализаций.

data$ATime <- as.POSIXct(as.character(data$ATime), format="%R", tz="UTC")
fullday <- as.POSIXct(c("00:00", "24:00"), format="%R", tz="UTC")

data %>% 
  ggplot(aes(x=ATime)) + 
  geom_line(aes(y=ASpeed5, col=1)) +
  geom_line(aes(y=BSpeed5, col=2)) +
  scale_x_datetime(limits = fullday, breaks="4 hours", date_labels = "%R") +
  theme(axis.text.x = element_text(angle = 45, vjust=1, hjust=1)) +
  ylab("Speed") + xlab("Time")

enter image description here

0 голосов
/ 02 ноября 2019

Пакет hms полезен для работы со временем

data %>% 
  mutate(ATime = as.character(ATime)) %>% # easier if character rather than factor
  mutate(xtime = hms::parse_hm(ATime)) %>% 
  gather(-ATime, -xtime, key = 'AB', value = 'Speed') %>% 
  ggplot(aes(x = xtime, y = Speed, colour = AB)) +
  geom_point() +
  geom_line() +
  scale_colour_hue(l=40) +. # make the default colours a little nicer
  labs(x = 'Time')

enter image description here

...