close
想用R處理資料的時候,第一個問題都是:如何把手上的資料弄進R裡?
這邊只先介紹表格形式的資料,像Excel表那樣的排列(其實一般接觸到的都是這種格式。)
 
確實有時候把手邊的資料弄進R裡是有一點麻煩或是須要一點經驗,特別是遇到Excel格式的資料。如果不是非常必要,請不用浪費時間去找"直接讀入Excel檔"的方法。 
 
有R-studio的話,就直接在視窗裡選 file > import dataset > From Excel ...
選完想要的檔案、物件名、sheet和其他設定之後,把code preview裡的程式存到文件稿裡,之後就不用再重新點選設定,直接跑code就可以了。
其他格式檔案(SAS、SPSS...)匯入也可以這麼用。
library(readxl)
Data <- read_excel("filename.xlsx")
View(Data)

readxl就是目前用來直接讀Excel檔的package...但過去讀Excel檔的package都不是長期有效,常常一年半載後就要重新找package,還滿麻煩的,希望這個package能活很久囉...
另外下載package來用的缺點就是有些package過一段時間可能會因為各種原因失靈,而R的內建函數通常不管過多久都能好好的。

所以這裡另外提一個用R基本的內建函數,簡單幾乎萬無一失的方法,也不用另外加載package:
把資料存成csv檔,然後放在R工作目錄所在的資料夾裡,然後在R裡輸入read.csv("filename.csv")都不會失敗。
而read.csv裡面還有其他更多設定可以改。


R所在的工作目錄不知道的話...在R裡輸入getwd() 就知道了。

> getwd()  # get working directory 
[1] "/Users/supercat"
把filename.csv檔放在資料夾"/Users/supercat”裡。
這時候,如果你在R裡輸入 dir(),應該要看到你想匯入的檔案名,如果沒有,就是放錯資料夾了。
> Data <-  read.csv("filename.csv")
 
當然也可以無視工作目錄輸入完整的路徑
> Data <- read.csv("/Users/supercat/filename.csv")
 
如果有錯誤訊息,大概就這兩種:
1.  斜線和反斜線方向錯了:只有一行Error
2.  沒有你說的路逕和檔案...有四五行Error,最後寫了No such file or directory!
 
另外有些問題會造成讀檔出錯,但在EXCEL裡是看不出問題的,須要用Notepad之類的純文字格式下去看才會知道問題在哪:
1. 第一列少了一欄,或是少了一個"," (或是說其他列最尾部有, 而第一列沒有) 
2. 有文字編碼的問題,須要找出正確的文字編碼並在read.csv讀檔時指派 encoding= ...
 
通常沒有任何訊息就是輸入完成了,看看是多大的資料,變數是什麼結構吧:
> str(Data)
個人覺得str是很重要的函數,很多奇怪的bug都是結構的關係。要取到想output裡的特定項目,也是要靠str。(參考Lesson 3 str() )
 
如果沒有資料可以試但是想練習,可以寫一筆資料出去,把它搬個位置改一改,再讀進來。寫表格出去:

> write.csv(CO2, "CO2.csv")

 
小結:csv無敵。
其實最常用的讀檔
函數應是read.table,如果要讀的檔案是其他型式的表格,例如用tab分隔,就可以用它read.csv只不過read.table的特例,就是直接引用read.table並修改了預設值(例如:改為首列為column names,分隔符號為",")。可以模仿這種方式,把函數設定改成自己常用的設定:自定義新函數 (給初學者)
匯入資料的時候還有很多小東西可以調整...行列名、跳過幾列開始、首列是否為欄位名、哪種符號為missing data...看看help裡read.table的說明吧!
help 的使用請參考 Lesson 4 如何自學R
 
Tips: (R v4.0 開始,已經把stringsAsFactors的預設值改為FALSE)
如果你的資料有很多變數是文字描述,而且資料量不小,請把stringsAsFactors關掉,也就是
> read.csv("filename.csv", stringsAsFactors = FALSE)
再根據需求,把想要改成Factor的欄位利用as.factor改掉就好!速度和記憶體都改善不少喔!
 
[2022.01.15] 如果常常要處理大資料,推薦學習使用 data.table pckage,可以使用fread讀檔,data.table自有一套整理資料的語法,須要花一點時間學習,但是在速度和記憶體的處理上都比base R data.frame和tidyverse好很多。
 
另外,如果要讀的檔案很多,要寫個迴圈,可以參考這篇筆記提到的方式和函數。
想要找多更多的相關的函數、函數內有什麼設定可修改,問google有時還不如善用help,參考如何自學R:help()
arrow
arrow
    文章標籤
    R statistics 統計
    全站熱搜

    霹靂貓 發表在 痞客邦 留言(0) 人氣()