讀取CSV檔

下面了解一下就好,請改用readr package(看Useful Packages相關章節).

read.table()系列函數是最常用來讀取表格檔案的函式,read.csv()相當於read.table()預設一些讀取csv所需要的參數,下面是read.table()的參數介紹(資料種類是單純是我推測的...看看就好):

參數 資料種類 說明
file String 檔案名
header Logical 表示檔案是否有檔頭
sep Character 表格的分隔符號
colClasses vector 標示每行資料種類的charactervector
nrows Integer 要讀取的行數,未設置此參數預設是全讀
comment.char Character 註解行開頭,read.table()預設把"#"開頭視為註解行跳過,如果檔案中沒有註解行則必須要明確設置為空字串""。
skip Integer 開頭要跳過的行數
stringsAsFactors Logical 預設為TRUE,把文字視為factor處裡,如果文字是無分類意義的註解等等,就設置為FALSE,常遇到的問題!!。

小檔案讀取:

  #自動跳過#開頭的列
  #自動判斷檔案有多少行
  #自動判斷行的資料種類
  x <- read.table("filename.txt")

大檔案讀取,此時會需要計算資源,以下幾點需要注意:

  • 確保剩餘記憶體大小可容納資料量,避免當機...。

    在目前64位元的機器上,R的雙精浮點數(numerics)占用64bit=8bytes,整數(Integer)占用32bit=4bytes,讀取一個純數字的資料表格所需要的記憶體大小約為:ncol x nrow x 4或8bytes

  • 如果沒有註解行,設置參數comment.char = ""

  • colClasses參數定義每行的資料型態(將vector賦值給colClass),可加速約兩倍,如果都是單一種類資料可以用colClasses = "numeric"的方式設置全部。

  • 如果記憶體空間不夠的話可以指定nrow參數,定義一次讀取的行數。

    如果一次讀取全部且參數colClasses為空,read.table()會將整行的資料都確認過之後才自動對資料類型作出判斷,會導致速度較慢,因此可以取頭幾行出來辨認資料種類,再將資料種類指定給read.table()函式去讀取資料,做法為:

    #先讀50行
    > dataSample <- read.table("data.txt", nrows = 50)
    #對每行都套用class()函式,算出該行的資料類型
    > classify <- sapply(dataSample , class)
    #把算出的資料類型傳給colClasses參數,再讀取整個檔案
    > data <- read.table("data.txt", colClasses = classify )
    

results matching ""

    No results matching ""