R Language
資料的來源有很多種,有可能是來自網路上的表格,也有可能是進行問卷調查後產生的.csv
、.xls
或.xlsx
檔。當然,這些不同的檔案都有不同的讀取、處理方式,因此我們以下要針對這些不同類型的檔案之讀取方式進行教學,接著,有關資料處理的議題我們將會以概論的方式呈現。[1]
在R
語言中,讀取資料最土砲也最簡單的方式是透過以下的方式進行,首先在RStudio 右側的面板上,點選Import Dataset
,接著選取要讀取的檔案類型,找到檔案點選開啟之後就可以成功讀取了。
而接下來在進行不同檔案類型讀取方式的教學以前,我們要來知道一下讀取檔案的一項重要議題,就是路徑。首先,我們要知道,電腦在讀取檔案的時候,一定要知道檔案的存儲位置在哪裡,想像你是一位圖書館管理員,當有民眾來向你詢問書籍擺放位置時,跟他說放在某書區,或是放在第幾走道的第幾個櫃子,後者顯然是比較明確的敘述方式。同樣地,我們也應該跟電腦說明我們檔案的確切位置,所以我們有以下幾種作法:
D:/某資料夾/檔案名稱.副檔名
這樣的方式告知電腦。getwd()
獲取目前工作路徑,如果是檔案存儲位置就不用改變;若工作路徑非我們檔案存儲位置,則我們使用setwd("檔案存儲路徑")
將工作路徑設置到我們檔案的存儲位置。.csv
檔相信看過之前的文章,應該知道如何讀取.csv
檔吧!如果忘記了沒關係,現在再複習一次!
而寫入的方式就是使用wrtie.csv()
將我們處理好的資料製作成新的.csv
檔。
.xls
、.xlsx
檔如果想要讀取Excel
相關的檔案,包含.xls
、.xlsx
檔等等,我們要安裝readxl
這個套件,接著使用read_excel()
讀取資料就可以了。
.dta
檔假設我們分析的資料是從Stata
整理過後的.dta
檔,我們則需要安裝另一個套件,haven
。
了解完不同檔案類型的讀取方式後,還有一個小技巧能夠幫助我們在進行資料處理前快速了解資料的狀況,即利用head()
瀏覽資料的前六筆。
當我們拿到一筆資料之後,這筆資料有可能存在一些對於我們分析是無用的元素,例如遺漏值,又或者是資料格式不統一,也有可能是資料型別無法直接分析,必須透過轉換型別才得以分析,我們會稱目前資料的狀態是「髒資料」。為了避免上述這些「雜質」影響我們的分析,我們必須透過資料清洗來解決上述的問題。
我們可以用is.
或class
函數辨別我們目前的資料屬於何種型別。比如在R 基礎技能:運算、流程控制與迴圈中提到薪資的例子:
我們可以用上面兩個函數辨別這幾個欄位是否為數值資料:
或是可以直接回傳這些欄位的型別:
而轉換型別的方式就是利用as.
函數進行轉換。假設我們想要將wage$Wage
的資料轉換成字串,我們只需輸入以下的指令就可以進行轉換:
注意到如果沒有指派的話,原始資料是不會有任何變動的。如果我們將一個型別無法互相轉換的資料進行轉換,則會產生下方的訊息:
為什麼字串處理很重要呢?假設我們今天有一筆客戶訂單的資料,裡頭包含客戶的姓名、電話、地址、電子郵件等資訊,但是這份資料是由不同的專員輸入進去的,而有些專員在訪問或輸入時十分不專心,導致姓名本來應該是首字母大寫,卻全部都是小寫。遇到這類的問題,我們就需要對字串進行處理。R
語言中大致有以下幾項處理字串的函數:
strsplit()
substr()
toupper()
、tolower()
paste()
與paste0()
gsub()
str_trim()
如果我們想要查詢字串是否包含某個文字,我們可以用grep()
與grepl()
兩個函數得到結果,前者回傳符合條件之索引值,後者則回傳符合條件之布林值,包含的話就是TRUE
,不包含則為FALSE
。今天老師在上課時想要點人起來回答問題,但不知道要點誰,於是老師想出了一個點名的方式:名字裡面含有「君」的就要起來回答。我們就可以利用下面的程式碼幫助老師點名:
正則表達式使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。在很多文本編輯器裡,正則表達式通常被用來檢索、替換那些符合某個模式的文本。[2]
利用正則表達式,我們可以省略許多時間(省去了我們從 0 輸入到 9 與 A 輸入到 Z 的工作)。此外,搭配一些表達的方式可以篩選、搜尋字串。而關於正則表達式,礙於篇幅限制,請參考曾意儒教授的文章。
*
:出現無限多次+
: 出現無限多次?
:出現 次{n}
:出現 次{n,}
:出現 無限多次{n,m}
:出現 次^
: 出現在字串開始的位置$
:出現在字串結束ˇ
的位置\b
:出現空字串(空白)開始或結束的位置\B
:出現非字串開始或結束的位置.
:出現所有的字元一次,包括空字串[...]
:出現字元清單()中的字元一次,可用-表示範圍,如[A-Z]
,[a-z]
,[0-9]
[^...]
:不出現字元清單()中的字元\
:要搜尋字串中的特殊字元時,前方須加上\
|
“:或針對目前的資料,假設我們有新的數據想要加入原有的數據,我們可以用rbind()
與cbind()
進行組合,從函數的名字即可看出端倪,前者是以行(row)為單位加入,後者則是以欄(column)為單位加入。
資料結合則是將兩筆資料進行整併,比如
本文參考自 6 資料處理與清洗 | 資料科學與R語言. https://yijutseng.github.io/DataScienceRBook/manipulation.html. ↩︎
“正則表達式.” Wikipedia, Wikimedia Foundation, 2 Oct. 2022, https://zh.m.wikipedia.org/zh-hant/正则表达式. ↩︎