R中是否有定义时间变量的函数?

Is there a function to define the time variable in R?

我有时间变量和其他变量。我想将我的第一个变量定义为时间,并使用 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)

我期望关于时间(x 轴)的每个速度(y 轴)有两条不同颜色的线

这是一个基本的 R 示例,但如果您经常处理时间,我会推荐 lubridate 包。在此示例中,我将 ATime 变量转换为日期 class。如果使用真实数据,您将需要设置自己的时区 (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")

编辑以显示数据的子集

要显示数据的子集,您可以使用过滤器。在这种情况下,如果时间是 'less than' 和 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")

新编辑以显示完整的 24 小时 window 以及指定的轴刻度

你的评论听起来像是你想用固定的休息时间形象化整个 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")

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