R:如何用plot.ts逐月绘制(时间序列)

时间:2015-01-28 22:31:23

标签: r time-series

我有以下数据框:日期从2013-01-01到2014-12-31。

问题: 如何使用plot.ts逐月显示趋势?

这是我的数据框(仅前6行):

    date       Pedidos
1 2013-01-01       0
2 2013-01-02       0
3 2013-01-03       0
4 2013-01-04       0
5 2013-01-05       0
6 2013-01-06       0

第1步:尝试使用此代码创建ts对象

Pedidos_meses_1314 <- ts(df$Pedidos, frequency = 12, start = c(2013,1), end = c(2014,12))

但是得到这个:注意:2014年我确实有“pedidos”。不知道为什么它显示“0”。

      Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2013   0   0   0   0   0   0   0   0   0   0   0   0
2014   0   0   0   0   0   0   0   0   0   0   0   0

而且,在绘图时我只是得到了一条扁线。见下图:

plot.ts(Pedidos_meses_1314)

enter image description here

Step2:但是,在ts()函数中将频率更改为365(一年中的每一天),我得到了我想要的东西。

考虑到日期列有单日信息,我试图将频率参数更改为365.然后我可以用“plot.ts”绘制它。

 Pedidos_dias_1314 <-  ts(df$Pedidos, frequency = 365, start = c(2013,1), end =   c(2014,12))



plot.ts(Pedidos_dias_1314)  #i got graph for days from 2013 and 2014.

enter image description here

2 个答案:

答案 0 :(得分:1)

您还可以使用xts库:

library(xts)

# Create a fake time serie with growing and decaying phases
set.seed(42)
X.day <- rep(cos(seq(-1,1,length.out = 365)),2) + rnorm(365*2, mean = 0, sd = 0.1)

# Create the sequence of dates
Dates <- seq(as.Date("2013-01-01"), as.Date("2014-12-31"), "day")

# Create the time serie
X.day <- xts(X.day, order.by = Dates)

plot(X.day)

enter image description here

# aggregate the daily data to monthly data using the mean
X.month <- apply.monthly(X.day, mean)

plot(X.month, ylim = range(X.day))  # range(X.day) to keep the same y-axis range as the previous plos

enter image description here

答案 1 :(得分:0)

对于第1步,您只能归零,因为制作时间序列不会导致R将每个月的所有Perdidos值相加。 为此,您可以运行:

 newData<-aggregate(data$Pedidos,list(date=format(as.Date(data$date),"%Y-%m")),sum)

然后,您将获得一个包含每月Perdidos总和的数据框。然后,您可以制作每月时间序列并绘制它以获得您想要的内容。

Pedidos_meses_1314 <- ts(newData$x, frequency = 12, start = c(2013,1), end = c(2014,12))