2014年5月8日 星期四

[R]用R轉換資料結構-將矩陣型資料轉為一般資料格式

        之前抓了氣溫資料,但是因為解釋力不強,所以又開始到處找變數,這次看上的是雨量資料。這次雨量資料本國氣象局的網站就有提供了!
(中央氣象局  http://www.cwb.gov.tw/V7/climate/dailyPrecipitation/dP.htm)。
   
        這次的雨量資料非常詳細,不但有年份,月份,還有每日的資料,相當符合需求。但是天下沒有白吃的午餐,雨量資料的格式是沒有辦法直接與之前的資料結合並且進行分析的。雨量資料是採用類似九九乘法表、矩陣資料的形式,月份和日期各站一邊,兩者的交叉點就是當天的雨量資料。但是一般要進行統計分析,需要的資料格式是CASE和欄位。
例如第一欄式日期,第二欄是雨量,每個CASE代表了某個特定日期的雨量。手工一點,我們當然可以把整個表格抓下來,然後再EXCEL裡面複製貼上將表格貼成我們要的格式,但是我們有三個年份的資料,這樣做太瞎了,所以只好偷懶寫程式碼轉換資料。


        首先我們要把資料抓下來,這次因為只有三個分頁,我就直接把表格抓下來變成CSV檔案存好,之後再用R來讀取,程式碼請見:
##Data Source:http://www.cwb.gov.tw/V7/climate/dailyPrecipitation/dP.htm
#讀入檔案
Kau_2011 <- as.matrix(read.csv("Kau_2011.csv",header=FALSE,fileEncoding="UTF-8-BOM"))
##Transform the row data(as matrix) to data frame type
#建立新的資料格式,只有兩欄,第一欄式日期,第二欄是雨量
Kau_2011_N=matrix(nrow = 31*12, ncol = 2)
#建立一個計算變項,讓R知道等下要把數值填到哪一欄
count <- 0
#這邊使用雙重迴圈,分別代表月分和日期
for (m in 1:12){
for(i in 1:31){
#Date
Kau_2011_N[i+count,1] <- paste("2011","/",m,"/",i,sep="")
#paste the data
Kau_2011_N[i+count,2] <- Kau_2011[i+1,m+1]
}
count <-count+31
}
view raw gistfile1.txt hosted with ❤ by GitHub

這個做法相對單純,只要搞懂雙重迴圈的走法就可以輕鬆轉換。

圖片來源:http://www.cwb.gov.tw/V7/climate/climate_info/statistics/statistics_1_2.html


沒有留言:

張貼留言