用未指定的时间绘制每小时时间序列

时间:2017-11-12 12:24:05

标签: r

我目前正在处理一个包含25列和120行的数据帧。与数据框中一样,日期和时间分别存储。我的数据框的摘录如下:

          date 1 2 3 4 5 6   7    8    9   10   11   12
1   2013-08-01 0 0 0 0 0 0 369 2416 1934 1125  768  653
2   2013-08-02 0 0 0 0 0 0 401 2328 1962 1080  849  588
5   2013-08-05 0 0 0 0 0 0 551 2855 2317 1099  876  805
6   2013-08-06 0 0 0 0 0 0 420 2382 1937 1065  844  710
7   2013-08-07 0 0 0 0 0 0 405 2397 1930 1081  768  773
8   2013-08-08 0 0 0 0 0 0 391 2273 1942 1098  831  633
11  2013-08-12 0 0 0 0 0 0 555 2938 2163 1071  898  700
12  2013-08-13 0 0 0 0 0 0 323 2375 1819 1087  905  734

显示24小时内只有12小时。

我想要一个每小时的时间序列图,对上面的数据帧进行最小的更改。提前致谢。

2 个答案:

答案 0 :(得分:1)

你必须融合data.frame以使小时成为单个变量,因为你想把它看作一个变量。

library(data.table)
hour_cols <- as.character(1:24)
plot_df <-
  melt(your_data_frame, id.vars = "date", measure.vars = hour_cols)
require(ggplot2)
ggplot(plot_df, aes(x = variable, y = value, colour = date)) +
  geom_point()

有关此方法的详细信息,请参阅?data.table::melt

编辑:这种方法当然只会在没有太多不同日期的情况下看起来很好。我在这里认为你只会在问题中提供12个日期。

答案 1 :(得分:0)

您需要将日期从宽格式转换为长格式。为此,您可以使用gathertidyr)中的?tidyr::gather并结合日期和时间:

library(tidyr)
long_data <- data %>%
  gather(time, val, `1`:`12`) %>%
  mutate(datetime = paste0(date, " ", time, ":00"))

然后绘制数据:

library(ggplot2)
ggplot(long_data, aes(x = variable, y = value) +
  geom_point()