R語言數據導入——二部

編程語言 R語言 Excel Windows R語言愛好者 R語言愛好者 2017-08-30

R語言數據導入——二部

上期我們瞭解了R語言數據讀入的核心函數read.table,現在我們瞭解一下其他可以用的函數有哪些,以及使用的場景和基本技巧。

非關係結構文件讀入scan()

除了read.table()這類讀取文本文檔的函數,還可以用scan()函數讀入。不同的是它的返回值為列表或者向量。

假設我們有下述文本文檔

241991
211993
531962

下列命令可以讀入該數據

data<-scan("e:/birth.txt")data
## [1] 24 1991 21 1993 53 1962

此外,你代碼稍加改造可以將數據變矩陣。

matrix(data,nrow=2,byrow=FALSE)
## [,1] [,2] [,3]

scan()也同樣支持訪問url數據上的數據,現在我們訪問網上的一個age數據

data <- scan("https://s3.amazonaws.com/assets.datacamp.com/blog_assets/age.csv", what = list(Age = 0,
## $Age

注意上述代碼中的what參數,如果what為list類通過上述代碼可以讀入類似於spreadsheet類型的文本文檔。只需要定義每行中各個項目(列)的類型。scan()其他眾多參數的用法和read.table比較類似。

固定列寬數據讀入read.fwf()

有的時候我們可以知道每一列的寬度是多少,下列代碼可以讓我們讀入這類數據

data <- read.fwf("https://s3.amazonaws.com/assets.datacamp.com/blog_assets/scores.txt", widths= c(7,-14,1,-2,1,1,1,1,1,1),
## subject sex s1 s2 s3 s4 s5 s6

上述代碼中width參數給出了字段的寬度。本例中,前7個字符為課程名字;然後的14個字符我們認為不需要,用-14跳過;接著,性別這一列需要一個寬度的字符;後面的2個空格不需要,用-2跳過;後續的成績每列需要一個寬度1,1,1,1,1,1傳入參數中。這些參數在不同的數據結構下,會有所不同。

另外,還可以使用read.fortran()函數讀取數據,詳細方法可以參見help文檔理解。

導入excel數據

剪切板導入excel表格

如果你已經有了個打開的表格,你可以複製其中的內容,然後用readClipboard()或者read.table()函數導入數據。

readClipboard() #Only on Windows

RODBC包讀入excel數據

通過RODBC包同樣可以導入excel數據表。代碼樣例如下

library(RODBC)

其中,dsn的寫法可以參考odbcConnect()函數的幫助文檔。此外,odbcConnectExcel()同樣可以讀入excel數據。

  • 當你讀入了Excel數據表後,相當於建立了一個連接,你可以使用sql語句來操作數據

    query <- "<SQL Query>"

    用RODBC包的建立了連接後,在操作完數據要使用odbcCloseAll()

其他方法讀入excel數據

其他可以參考的方法有: * openxlsx包中的read.xlsx函數。 * readxl包中的read_excel函數。

其他類型的數據讀入

其他主流數據類型R可支持的包括有JSON格式,SPSS文件,Stata文件,SAS文件,s-plus文件,EpiInfo文件,matlab文件,Octave文件,FitbitScraper 數據,Quantmod 數據,ARFF 文件。 支持導入的數據庫有,MogoDB,MySQL,Oracle,PostgreSQL,SQLite,RJDBC,dBase等。

二進制數據讀入

二進制數據由二進制浮點組成,8個浮點為一個字節。可以使用readBin函數讀入此類數據。

connection <- file("<path to your file>", "rb") #You open the connection as "reading binary"(rb)

GIS數據讀入

地理信息數據在R中也比較常用,常見的rgdal和raster包都有對應的函數處理此類數據。

大型數據集的讀入

如何導入較大的數據一直是R用戶的經常討論的問題,除了將數據導入數據庫中處理外,也有一些比較不錯的處理大型數據的方法。

  • data.table包中的fread函數是比較容易實現快速讀入大數據的方法,讀入大型數據速度相當理想。

    library(data.table)
  • ff包:該程序包磁盤緩存的技術可以讀入超過內存限值大小的數據,常用的函數有read.table.ffdf(),read.csv.ffdf()等。

    library(ff)
  • bigmemory包,此包也常用於處理大型數據。樣例代碼如下,但是此包不能用於windows系統:

    library(bigmemory)
  • sqldf包,此包也可以考慮用於處理大型數據,它還可以使用sql語句處理數據。用read.csv.sql()函數讀入數據。

    library(sqldf)
  • 隨後我們別忘了R中的read.table函數,但是,用此函數讀入大型數據,需要對參數有較好的控制。簡單說,你能設置的參數越多,讀入數據的速度越快。

總結

最後,我們將上述常見的方法做個了總結表格,讀者可在用時參考,該表格涵蓋了大部分常用數據格式的讀入方法。

函數來源描述
scanr-base順序讀取文件中的數據值
read.fwfr-base按行和指定列寬度讀取數據
read.fortranr-base採用fortran格式設置讀取固定格式數據
readClipboardr-base讀取剪切板中的數據
odbcConnectRODBC包讀取excel數據,採用odbc
gs_readgooglesheet包讀取google sheet
read.DIFr-base讀取DIF文件
read_excelreadxl包讀取excel文件
read.xlsxopenxlsx包讀取excel的xlsx文件
read.odsreadODS包讀取open document表格文檔
fromJSONjsonlite包讀取JavaScript的json文件
read_spsshaven包讀取spss文件
read_dtahaven包讀取stata文件
read.xportforgein包,sasXPORT包讀取sas文件
read.Sforeign包讀取s-splus文件
read.epiinfoforeign包讀取epi Info文件
readMatR.matlab包讀取MATLAB文件
read.octaveforeign包讀取Octave文件
read.arffforeign包讀取Weka屬性關係文件(ARFF)
mongolite包,Rmongo包,RODBC包,Roracle包,RPostgreSQL包,RSQLite包,RJDBC包各類常見數據庫導入數據到R
readBinr-base讀入二進制文件
hdf5包,h5r包,rhdf5包,RNetCDF包,ncdf包讀入hdf文件,NASA和UCAR常用氣象數據讀取
read.dbfforeign包讀入DBF文件
read.ftabler-base讀入無格式列聯表Flat contingency table
freaddata.table包大型文本文檔讀入
read.table.ffdf read.csv.ffdf …ff包大型文本文檔讀入
read.big.matrixbigmemory包大型文本文檔讀入,無法在windows下使用
read.csv.sqlsqldf包大型文本文檔讀入
read.tabler-base大型文本文檔讀入,但是需要合理設計參數,否則速度不理想

來源:DataCamp 編譯:亮亮

相關推薦

推薦中...