Day 22- R語言 匯入&整理外部檔案資料
(前言:內個,我只是個剛接觸程式設計的小萌新,如果內文內容或程式碼寫的不對,還請各位大大指教 Orz)
在做資料處理或資料視覺化的時候,我們可能要從外部excel檔案或者是csv檔案直接匯入數據,而不是直接使用R的sample函數或向量產生數據,這時候,R的資料匯入功能就很好用了,今天我們要來學習如何使用R的匯入excel表格功能,另外也學習進行簡單的資料整理,防止資料缺漏對計算結果產生影響
今天我們就用一份來自UCI Machine Learning Repository 的空氣品質監測資料來進行繪圖。這份空氣品質監測資料的測量地點應該是在北京昌平(Chang Ping),總共有35,064筆資料,如果要下載的話可以來這邊: https://archive.ics.uci.edu/ml/datasets/Beijing+Multi-Site+Air-Quality+Data
(備註:為了不折磨電腦加縮短資料處理時間,我將34,064筆資料刪除,剩餘1000筆資料)
首先介紹用程式碼指定讀取.csv檔案
由於下載的檔案是.csv格式,我們就不用再做額外處理。首先,我們要先用getwd()
確認一下工作環境,如果工作環境與.csv檔案所放置的地方不一致的話,R會抓不到檔案。如果要切環工作環境就用setwd(工作環境路徑)
執行。接下來用read.csv()
函數指定csv檔案,完成後會有csv的部分行數預覽出現(這個部分也可以由head()
函數隨時執行,但是要先將read.csv儲存至一個變數上)。以上程式碼如下列:
getwd()
setwd("/Users/randy/Desktop")
cp <- read.csv("air_cp.csv")
head(cp)
輸出結果如下列:
如果要檢查欄位名稱的話,可以用colnames
執行,輸出結果如下列:
> colnames(cp)
[1] "No" "year" "month" "day" "hour" "PM2.5" "PM10" "SO2" "NO2"
[10] "CO" "O3" "TEMP" "RAIN" "WSPM"
如果今天要一次操作多個檔案的話,可以先將所有檔案放進一個資料夾,然後用統一方式命名及編號(在範例裡我是用air_號碼),然後用setwd將工作環境指定到存放檔案的資料夾中,
{
getwd()
setwd("/Users/randy/Desktop/air_data")
step1 <- list.files(path = "/Users/randy/Desktop/air_data", pattern = "air_.*csv")
step2 <- lapply(step1, read.csv)
step3 <- rbind(step2)
head(step2)
}
第一步是指定環境還有檔案的命名規則(規律),第二步使用lapply函數將剛剛第一個檔案列表全部應用read.csv
函數,最後第三步把剛剛讀出的檔案合併成一個大表格
回到剛剛的air_cp 上,如果要檢查一個欄位中是否含有在其他欄位重複的元素,可以使用duplicated()
函數
接下來要學的是如何將多個欄合併成為一個新的欄位。其實方法很簡單,用paste函數就可以達到這個效果。程式碼如
下:
cp$date <- paste(cp$year,cp$month, cp$day, sep = “/”)
可以看到,我們用paste 這個函數把cp裡面的year, month, 還有day欄位合併成date。既然現在有一個獨立的date欄位,那我們可以把year, month, day欄位刪除啦 ˊˇˋ ,要刪除欄位的話,可以用下列程式碼執行:
cp[, !(colnames(cp) %in% c("year", "month", "day"))]
最後,我們重新排序數據,讓數據以 "No","date","hour","PM2.5","PM10","SO2","NO2","CO","O3","TEMP","RAIN","WSPM" 的方式排列,程式碼如下:
cp <- cp[c("No","date","hour","PM2.5","PM10","SO2","NO2","CO","O3","TEMP","RAIN","WSPM")]
整理後看起來會像這樣:
最後,透過使用str()函數,可以得知每一個欄位的資料型態。就cp這個表格來說,輸出結果如下:
參考資料: