讀取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 )