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 name
FALSE:把檔案第一行當值,自動生成罐頭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():歐洲人把,拿來當作小數點,所以需要用特殊的函式讀他們的檔案...

results matching ""

    No results matching ""