我有以下数据框:日期从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)
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.
答案 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)
# 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
答案 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))