2014-07-11 54 views
0

我有多個不規則的時間序列(data.frame),它看起來像這樣轉換多個不規則時間序列進入正規時間序列

station Time  WaterTemp 
1  01-01-1974 5.0000000 
1  01-02-1974 5.0000000 
1  01-03-1974 8.6000004 
1  01-05-1974 8.1333332 
1  01-07-1974 12.7999999 
2  01-01-1974 5.0000000 
2  01-02-1974 5.0000000 
2  01-04-1974 8.6000004 
2  01-06-1974 8.1333332 
2  01-08-1974 12.7999999 

我打算將它轉換成常規時間序列(TS一個data.frame )應該看起來像這樣的對象

Time  Staion1  Station2 
Jan1974 5.0000000 5.0000000 
Feb1974 5.0000000 5.0000000 
Mar1974 8.6000004 NA 
Apr1974 NA   8.6000004 
May1974 8.1333332 NA 
June1974 NA   8.1333332 
July1974 12.7999999 NA 
    Aug1974 NA   12.7999999 
    Sep1974 NA   NA 
    Oct1974 7.9   NA 
    Nov1974 NA   NA 
    Dec1974 NA   7.4 

我該怎麼做? 儘管單個時間序列有很多解決方案,但我還沒有遇到過處理多個時間序列的解決方案。

感謝,

回答

1

如果DF是你的數據幀,然後試試這個。在最後一行轉換爲ts使得它經常然後我們轉換回動物園:

library(zoo) 
z <- read.zoo(DF, split = 1, index = 2, format = "%d-%m-%Y") 
z.ym <- aggregate(z, as.yearmon, identity) # convert to yearmon 
zm <- aggregate(as.zoo(as.ts(z.ym)), as.yearmon, identity) 

到最後一行另一種方法是這兩行:

g <- zoo(, seq(start(z.ym), end(z.ym), deltat(z.ym))) # grid 
zm <- merge(z.ym, g) 

在這兩種情況下,在此點coredata(zm)是數據部分,time(zm)是索引,儘管您可能希望將其保留爲動物園對象,以便您可以使用其他時間系列工具以及接受該表單的時間序列的許多其他包。

注:這裏是一個完全獨立的可重複的例子:

DF <- structure(list(station = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
2L), Time = structure(c(1L, 2L, 3L, 5L, 7L, 1L, 2L, 4L, 6L, 8L 
), .Label = c("01-01-1974", "01-02-1974", "01-03-1974", "01-04-1974", 
"01-05-1974", "01-06-1974", "01-07-1974", "01-08-1974"), class = "factor"), 
    WaterTemp = c(5, 5, 8.6000004, 8.1333332, 12.7999999, 5, 
    5, 8.6000004, 8.1333332, 12.7999999)), .Names = c("station", 
"Time", "WaterTemp"), class = "data.frame", row.names = c(NA, 
-10L)) 

library(zoo) 
z <- read.zoo(DF, split = 1, index = 2, format = "%d-%m-%Y") 
z.ym <- aggregate(z, as.yearmon, identity) # convert to yearmon 
zm <- aggregate(as.zoo(as.ts(z.ym)), as.yearmon, identity) 

,並提供:

> zm 
       1   2 
Jan 1974 5.000000 5.000000 
Feb 1974 5.000000 5.000000 
Mar 1974 8.600000  NA 
Apr 1974  NA 8.600000 
May 1974 8.133333  NA 
Jun 1974  NA 8.133333 
Jul 1974 12.800000  NA 
Aug 1974  NA 12.800000 

更新一些修正和改進。

+0

哦!大!但是如果我想將日期格式轉換爲yearmon並且填寫年份中缺失的月份呢? – Arora

+0

已更新答案。 –

+0

剛剛嘗試使用您的代碼。在運行最後一步後出現以下錯誤:動物園錯誤(coredata(rval),索引): 「x」:嘗試定義無效的動物園對象 – Arora

相關問題