readr
read_table()
、read_csv()
取代R原本的read.table()
、read.csv()
,更快,有進度條可以看,有較完整的debug資訊(告訴R使用者讀取的檔案確切哪裡出問題),反正就是優化過的用就對了,下面介紹最常用的read_csv()
(假設你已經安裝完readr package):
我們先在D槽底下建立一個這樣的csv檔案作為練習,內容是三個人有四科成績
Name | A | B | C | D |
---|---|---|---|---|
Peter | 97 | 86 | 86 | 78 |
Paul | 98 | 83 | 88 | 81 |
Chris | 99 | 28 | 55 | 30 |
讓package自動判斷資料類型:
> x <- read_csv("D:/test.csv") #先引入package Parsed with column specification: cols( Name = col_character(), #read_csv()判斷Name這行資料由字元組成 A = col_integer(), #read_csv()判斷A-D這幾行資料由整數組成 B = col_integer(), C = col_integer(), D = col_integer() ) > x #秀出讀入的表格看是否正確 # A tibble: 3 × 5 Name A B C D <chr> <int> <int> <int> <int> 1 Peter 97 86 86 78 2 Paul 98 83 88 81 3 Chris 99 28 55 30
明確指定資料類型
但是為了避免readr錯誤判斷資料種類,最好明確將資料類型指定給
col_types
參數(c = character, i = integer, n = number, d = double, l = logical, D = date, T = date time, t = time, ? = guess, or _/- to skip the column.):#第一行是char,2-5行是int,就將col_types設為ciiii > x <- read_csv("D:/test.csv", col_types = "ciiii") > x # A tibble: 3 × 5 Name A B C D <chr> <int> <int> <int> <int> 1 Peter 97 86 86 78 2 Paul 98 83 88 81 3 Chris 99 28 55 30
遠端讀取與解壓縮
字尾是gz、bz2、xz、zip的壓縮檔,不需要任何餐數可以直接以上述方式讀取,而遠端的檔案(路徑名稱以http、https、ftp、ftps開頭的)會自動下載,當然如果遠端的檔案為gz壓縮檔,則會抓完又解壓縮好,看多方便...官方文件:
Files ending in .gz, .bz2, .xz, or .zip will be automatically uncompressed. Files starting with http://, https://, ftp://, or ftps:// will be automatically downloaded. Remote gz files can also be automatically downloaded & decompressed.
其他比較常用的參數(其餘有興趣看document...):
參數 | 說明 |
---|---|
escape_backslash |
檔案是否用\作為跳脫符號(常用) |
quote |
用來框住字串的字元 |
col_names |
有三種可能:TRUE :會拿第一行作為column nameFALSE :把檔案第一行當值,自動生成罐頭column name(X1、X2...)character vector :把檔案第一行當值,vector內容當作column name。 |
col_types |
用一行縮寫明確指定資料類型,c = character, i = integer, n = number, d = double, l = logical, D = date, T = date time, t = time, ? = guess, or _/- to skip the column. |
cols_only |
只指定某些行的資料型態 |
local |
一些地區的設定,有關於編碼、時區等等... |
na |
設定missing value的替代文字 |
quoted_na |
設定是否將不包含任何值的雙引號視為missing value(預設是) |
comment |
指定註解用什麼文字開頭,被設定成註解的行不會被讀進來 |
trim_ws |
是不是該把每筆資料頭尾的空白切掉呢? |
skip |
設定跳過開頭幾行資料 |
n_max |
設定最多讀取幾行 |
guess_max |
設定要拿來判斷資料型態的資料筆數 |
progress |
進度條,不重要但是在loop跟function裡面記得關掉,很重要! |
其他函式
read_tsv()
:以tab作為分隔符號read_delim()
:可以自行設定分隔符號,用法:read_delim(file, delimited sign)
read_csv2()
:歐洲人把,
拿來當作小數點,所以需要用特殊的函式讀他們的檔案...