上期我们了解了R语言数据读入的核心函数read.table,现在我们了解一下其他可以用的函数有哪些,以及使用的场景和基本技巧。
非关系结构文件读入scan()
除了read.table()这类读取文本文档的函数,还可以用scan()函数读入。不同的是它的返回值为列表或者向量。
假设我们有下述文本文档
24 | 1991 |
21 | 1993 |
53 | 1962 |
下列命令可以读入该数据
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(";, what = list(Age = 0,## $Age注意上述代码中的what参数,如果what为list类通过上述代码可以读入类似于spreadsheet类型的文本文档。只需要定义每行中各个项目(列)的类型。scan()其他众多参数的用法和read.table比较类似。
固定列宽数据读入read.fwf()
有的时候我们可以知道每一列的宽度是多少,下列代码可以让我们读入这类数据
data <- read.fwf(";, 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 WindowsRODBC包读入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用户的经常讨论的问题,除了将数据导入数据库中处理外,也有一些比较不错的处理大型数据的方法。
da包中的fread函数是比较容易实现快速读入大数据的方法,读入大型数据速度相当理想。
library(da)ff包:该程序包磁盘缓存的技术可以读入超过内存限值大小的数据,常用的函数有read.(),read.c()等。
library(ff)bigmemory包,此包也常用于处理大型数据。样例代码如下,但是此包不能用于windows系统:
library(bigmemory)sqldf包,此包也可以考虑用于处理大型数据,它还可以使用sql语句处理数据。用read.c()函数读入数据。
library(sqldf)随后我们别忘了R中的read.table函数,但是,用此函数读入大型数据,需要对参数有较好的控制。简单说,你能设置的参数越多,读入数据的速度越快。
总结
最后,我们将上述常见的方法做个了总结表格,读者可在用时参考,该表格涵盖了大部分常用数据格式的读入方法。
函数 | 来源 | 描述 |
---|---|---|
scan | r-base | 顺序读取文件中的数据值 |
read.fwf | r-base | 按行和指定列宽度读取数据 |
read.fortran | r-base | 采用fortran格式设置读取固定格式数据 |
readClipboard | r-base | 读取剪切板中的数据 |
odbcConnect | RODBC包 | 读取excel数据,采用odbc |
gs_read | googlesheet包 | 读取google sheet |
read.DIF | r-base | 读取DIF文件 |
read_excel | readxl包 | 读取excel文件 |
read.xlsx | openxlsx包 | 读取excel的xlsx文件 |
read.ods | readODS包 | 读取open document表格文档 |
fromJSON | jsonlite包 | 读取JavaScript的json文件 |
read_spss | haven包 | 读取spss文件 |
read_dta | haven包 | 读取stata文件 |
read.xport | forgein包,sasXPORT包 | 读取sas文件 |
read.S | foreign包 | 读取s-splus文件 |
read.epiinfo | foreign包 | 读取epi Info文件 |
readMat | R.matlab包 | 读取MATLAB文件 |
read.octave | foreign包 | 读取Octave文件 |
read.arff | foreign包 | 读取Weka属性关系文件(ARFF) |
… | mongolite包,Rmongo包,RODBC包,Roracle包,RPostgreSQL包,RSQLite包,RJDBC包 | 各类常见数据库导入数据到R |
readBin | r-base | 读入二进制文件 |
… | hdf5包,h5r包,rhdf5包,RNetCDF包,ncdf包 | 读入hdf文件,NASA和UCAR常用气象数据读取 |
read.dbf | foreign包 | 读入DBF文件 |
read.ftable | r-base | 读入无格式列联表Flat contingency table |
fread | da包 | 大型文本文档读入 |
read. read.c … | ff包 | 大型文本文档读入 |
read.big.matrix | bigmemory包 | 大型文本文档读入,无法在windows下使用 |
read.c | sqldf包 | 大型文本文档读入 |
read.table | r-base | 大型文本文档读入,但是需要合理设计参数,否则速度不理想 |
来源:DataCamp 编译:亮亮