我有一个这样的时间序列,从1979年到2018年
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1979 15.414 16.175 16.342 15.447 13.857 12.530 10.311 8.041 7.051 8.748 10.943 13.336
1980 14.862 15.955 16.041 15.429 13.793 12.205 10.100 7.984 7.667 9.183 11.383 13.593
1981 14.910 15.604 15.632 15.010 13.802 12.430 10.271 7.844 7.138 8.856 10.929 13.341
1982 15.177 15.974 16.044 15.466 13.973 12.476 10.367 8.139 7.302 9.421 11.627 13.642
1983 14.942 16.006 16.085 15.172 13.491 12.296 10.570 8.186 7.395 9.334 11.461 13.299
1984 14.473 15.299 15.584 15.015 13.577 12.152 9.977 7.771 6.805 8.561 10.842 12.989
我可以使用t(df)
和tidyr::gather(df)
将序列转换为单列,得到的结果如下:
key value
1 1979 15.414
2 1979 16.175
3 1979 16.342
4 1979 15.447
5 1979 13.857
6 1979 12.530
尝试使用ggplot2
时出现问题:我想从我的系列中获得一个非常漂亮的图形,但这是不可能的,因为我不知道如何配置x轴以使其具有普通索引。我的系列是密集的正弦曲线类型。
ggplot(df, aes(key, value)) + geom_line(aes(group=1), colour="#000099")
这不能正确表示系列。 Coud有人帮助我获得一个好的df来代表我的数据吗?
另一方面,我想按季度代表它。我是从zoo::as.yearqtr
找到的,但无法正常工作。例如:ts(df,start=c(as.yearqrt("1979-1",1)),frequency=4)
我也找到了这个time series plot with x axis in "year"-"month" in R,但我更喜欢使用ggplot2,即使可能的话也可以使用相同的方法。
先谢谢您。所有有用的评论都将得到奖励!
答案 0 :(得分:3)
您的日期当前使用行和列存储在两个位置。我们可以收集该列,以使Year和Month在每个数据点可用的单独列中。要创建月份和年份的日期数据,我喜欢lubridate
。 (在这种情况下,我将15分配给每个月的中旬时间。)
df %>%
gather(Month, val, -Year) %>%
mutate(date = lubridate::ymd(paste(Year, Month, 15))) %>%
ggplot(aes(date, val)) +
geom_line()
df <- read.table(
header = T,
stringsAsFactors = F,
text = "Year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1979 15.414 16.175 16.342 15.447 13.857 12.530 10.311 8.041 7.051 8.748 10.943 13.336
1980 14.862 15.955 16.041 15.429 13.793 12.205 10.100 7.984 7.667 9.183 11.383 13.593
1981 14.910 15.604 15.632 15.010 13.802 12.430 10.271 7.844 7.138 8.856 10.929 13.341
1982 15.177 15.974 16.044 15.466 13.973 12.476 10.367 8.139 7.302 9.421 11.627 13.642
1983 14.942 16.006 16.085 15.172 13.491 12.296 10.570 8.186 7.395 9.334 11.461 13.299
1984 14.473 15.299 15.584 15.015 13.577 12.152 9.977 7.771 6.805 8.561 10.842 12.989")