我目前正在处理一个包含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小时。
我想要一个每小时的时间序列图,对上面的数据帧进行最小的更改。提前致谢。
答案 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)
您需要将日期从宽格式转换为长格式。为此,您可以使用gather
(tidyr
)中的?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()