R語言是統計方面非常強大的程式語言,想在既有的資料上建立模型、估計、檢定、甚至預測,在R語言上都是很容易的事情,但前提是必須要把資料整理成可以代入模型的形式。若是遇到了時間相關的資料,R語言有內建處理時間變數的函數,但是在大量時間資料的實際運用上非常不方便,所以介紹給想學R語言並且要處理時間相關資料的新手們一個叫"zoo”的套件,若要處理金融相關資料還有一個進階一點的叫”xts”的套件。
今天要先稍微介紹一下zoo這個套件,以下是小編常用的函數,若要深入了解其中功能請詳見zoo的說明文件。首先用zoo的函數來產生類別為zoo的物件。
> ?zoo > z <- zoo(x = 1:5, order.by = 6:10) > class(z) [1] "zoo" > z 6 7 8 9 10 1 2 3 4 5 > z <- zoo(x = 1:5, order.by = as.Date(6:10)) > z 1970-01-07 1970-01-08 1970-01-09 1970-01-10 1970-01-11 1 2 3 4 5
zoo是由data與index組合,zoo物件中的index可以是時間變數也可以是數字向量,其中的as.Date函數是以1970-01-01為起點開始算起的時間轉換函數,可在R裡執行?as.Date找到使用說明。若要取zoo物件中的data出來可以用coredata(),time()則是可以取zoo物件裡的時間index。
> coredata(z) [1] 1 2 3 4 5 > time(z) [1] "1970-01-07" "1970-01-08" "1970-01-09" "1970-01-10" "1970-01-11"
coredata()、time()也可以用於指定zoo物件裡的data與index
> coredata(z) <- 6:10 > time(z) <- as.Date(11:15) > z 1970-01-12 1970-01-13 1970-01-14 1970-01-15 1970-01-16 6 7 8 9 10
plot()也有定義zoo的方法,可以使用plot()來畫zoo物件
> plot(z)

也可以使用window()來擷取一段時間的資料
> window(z, start = "1970-01-13", end = "1970-01-15") 1970-01-13 1970-01-14 1970-01-15 7 8 9
接下來最重要的就是rollapply(),用它可以求移動平均數
> z 1970-01-12 1970-01-13 1970-01-14 1970-01-15 1970-01-16 6 7 8 9 10 > rollapply(z, 3, align = "right", mean) 1970-01-14 1970-01-15 1970-01-16 7 8 9
等於另外一個函數rollmean()
> rollmean(x = z, k = 3 ,align = "right") 1970-01-14 1970-01-15 1970-01-16 7 8 9
rollapply()可以使用自訂function,例如:取當期與落後2期的差
> rollapply(z, 3, align = "right", function(m) { + m[3]-m[1] + }) 1970-01-14 1970-01-15 1970-01-16 2 2 2
另外可能會用到的函數是 na.locf(),在zoo的物件裡若存在NA值,則會取上一個值來取代
> z=zoo(c(1,3,5,NA,7,NA)) > z 1 2 3 4 5 6 1 3 5 NA 7 NA > na.locf(z) 1 2 3 4 5 6 1 3 5 5 7 7
使用zoo套件可以給予一個序列資料index,並可以利用rollapply()函數處理落後數期的運算,非常的方便。輸入?rollapply指令的說明頁面還有許多關於rollapply()的例子,推薦給對R語言有興趣的人。