2017-05-25 53 views
0

我有兩個簡單的時間序列數據集,我想繪製在同一個圖上。如何在同一圖上繪製兩個不同長度的簡單時間序列R

訣竅在於,所述數據集具有不同的長度和完全不同的日期範圍:設置

數據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

爲一個時間序列不與另一個時間序列重疊的位置添加缺失值。 – Alexis

+0

@Alexis但是如果沒有重疊呢? – 2017-05-25 22:33:05

+0

這兩個系列在未繪製的繪製時間段中都會丟失值。 – Alexis

回答

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軸上的日期只是根據第一個數據集。一個怪異的解決方法是將它們都轉換爲數字。

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 

也許包括偏移和關於密謀df2df1

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)) 

也許不是規模最優雅的解決方案,但它應該讓你在那裏,希望用最小的調整。

+0

遲到對此做出迴應,但將它們轉換爲數字值爲我工作,謝謝! – ekglimmer

相關問題