我有两个简单的时间序列数据集,我想在同一个图上绘制。
诀窍是,数据集的长度不同,日期范围完全不同:
数据集1
|-----------|--------| | Date | Visits | | 2/14/2013 | 1 | | 2/18/2013 | 3 | | 2/19/2013 | 1 | | 2/20/2013 | 12 | | 2/21/2013 | 10 | | 2/22/2013 | 11 |
数据集2
|----------|--------| | Date | Visits | | 5/1/2015 | 19 | | 5/2/2015 | 4 | | 5/3/2015 | 10 | | 5/4/2015 | 27 | | 5/5/2015 | 12 | | 5/6/2015 | 6 | | 5/7/2015 | 1 | | 5/8/2015 | 4 |
我想将它们缩放到相同的范围并使它们保持日期不变,这样我就可以在同一个地块上绘制它们,只是为了观察一般趋势(在接近结束或接近开始时是否增加了访问量等) 。
我觉得我必须错过一个简单的概念,因为我不认为这应该很难。这可以在R吗?
答案 0 :(得分:1)
如果你的两个时间序列作为data.frames存在,你可以像
那样接近它df1 <- data.frame(Date=c("2/14/2013",paste0("2/",as.character(18:22),"/2013")),Visits=c(1,3,1,12,10,11))
df2 <- data.frame(Date=paste0("5/",as.character(1:8),"/2015"),Visits=c(19,4,10,27,12,6,1,4))
# turn dates into Dates
df1$Date <- as.Date(df1$Date, format="%m/%d/%Y")
df2$Date <- as.Date(df2$Date, format="%m/%d/%Y")
这可以是一种简单的添加剂偏移的快速方法:
offset <- min(df2$Date) - min(df1$Date) # this would make them start at the same place
df2.1 <- df2
df2.1$Date <- df2.1$Date - offset
plot(df1, xlim=range(c(df1$Date,df2.1$Date)),ylim=range(c(df1$Visits,df2$Visits)), type='l',col=2)
lines(df2.1,col=4)
请注意,这有点令人讨厌,因为x轴上的日期仅与第一个数据集有关。一个hacky解决方法是将它们都转换为数字。
df1$Date_n <- as.numeric(df1$Date)
df2$Date_n <- as.numeric(df2$Date)
......也许让他们都从第1天开始。
df1$Date_n <- df1$Date_n - min(df1$Date_n) + 1
df2$Date_n <- df2$Date_n - min(df2$Date_n) + 1
可能包含相对于df2
df1
的偏移量和比例
offset <- 0
scale <- 1
df2$Date_n1 <- df2$Date_n*scale + offset
plot(df1$Date_n, df1$Visits, type='l', col=2, xlim=range(c(df1$Date_n,df2$Date_n1)), ylim=range(c(df1$Visits,df2$Visits)), xlab="day", ylab="Visits")
lines(df2$Date_n1, df2$Visits, col=4)
legend("topleft", legend=c("series 1","series2"),lwd=1,col=c(2,4))
也许不是最优雅的解决方案,但它应该让你在那里,希望最小的调整。