微信号:Rsq-9527

介绍:"R语言"交流讨论

R语言如何进行数据导入

2016-05-13 10:00 笙戌公子

    作为一名数据分析人员,你通常会面对来自多种数据源和数据格式的数据,你的任务是将这些数据导入你的工具,分析数据,并汇报分析结果。R提供了适用范围广泛的数据导入工具。向R中导入数据的权威指南参见可在http://cran.r-project.org/doc/manuals/R-data.pdf下载的R Data Import/Export手册 。R可从键盘、文本文件、Microsoft Excel和Access、流行的统计软件、特殊格

式的文件,以及多种关系型数据库中导入数据。



从带分隔符的文本文件导入数据

    你可以使用 read.table() 从带分隔符的文本文件中导入数据。此函数可读入一个表格格式的文件并将其保存为一个数据框。其语法如下:


    其中, file 是一个带分隔符的ASCII文本文件, header 是一个表明首行是否包含了变量名的逻辑值( TRUE 或 FALSE ) , sep 用来指定分隔数据的分隔符, row.names 是一个可选参数,用以指定一个或多个表示行标识符的变量。

    举个例子,语句:


    
从当前工作目录中读入了一个名为 studentgrades.csv 的逗号分隔文件,从文件的第一行取得了各变量名称,将变量 STUDENTID 指定为行标识符,最后将结果保存到了名为 grades 的数据框中。请注意,参数 sep 允许你导入那些使用逗号以外的符号来分隔行内数据的文件。你可以使用sep="\t" 读取以制表符分隔的文件。此参数的默认值为 sep="" ,即表示分隔符可为一个或多个空格、制表符、换行符或回车符。默认情况下,字符型变量将转换为因子。我们并不总是希望程序这样做(例如处理一个含有被调查者评论的变量时) 。有许多方法可以禁止这种转换行为。其中包括设置选项stringsAsFactors=FALSE ,这将停止对所有字符型变量的此种转换。另一种方法是使用选项colClasses 为每一列指定一个类,例如 logical (逻辑型) 、 numeric (数值型) 、 character(字符型) 、 factor (因子) 。函数 read.table() 还拥有许多微调数据导入方式的追加选项。更多详情,请参阅help(read.table) 。


导入Excel数据

    读取一个Excel文件的最好方式,就是在Excel中将其导出为一个逗号分隔文件(csv) ,并使用前文描述的方式将其导入R中。在Windows系统中,你也可以使用 RODBC 包来访问Excel文件。电子表格的第一行应当包含变量/列的名称。


    这里的 myfile.xls 是一个Excel文件, mysheet 是要从这个工作簿中读取工作表的名称,channel 是一个由 odbcConnectExcel() 返回的 RODBC 连接对象, mydataframe 是返回的数据框。 RODBC 也可用于从Microsoft Access导入数据。更多详情,参见 help(RODBC) 。Excel 2007使用了一种名为XLSX的文件格式,实质上是多个XML文件组成的压缩包。 xlsx包可以用来读取这种格式的电子表格。在第一次使用此包之前请务必先下载并安装好。包中的函数 read.xlsx() 可将XLSX文件中的工作表导入为一个数据框。其最简单的调用格式是read.xlsx(file, n) ,其中 file 是Excel 2007工作簿的所在路径, n 则为要导入的工作表序号。

    举例说明,在Windows上,以下代码:


    从位于C盘根目录的工作簿myworkbook.xlsx中导入了第一个工作表, 并将其保存为一个数据框 mydataframe 。 xlsx 包不仅仅可以导入数据表,它还能够创建和操作XLSX文件。那些需要为R和Excel开发接口的程序员应当研究一下这个较新的包。


导入XML数据

    以XML格式编码的数据正在逐渐增多。R中有若干用于处理XML文件的包。例如,由DuncanTemple Lang编写的 XML 包允许用户读取、写入和操作XML文件。对使用R存取XML文档感兴趣的读者可以参阅www.omegahat.org/RSXML,从中可以找到若干份优秀的软件包文档。


从网页抓取数据

    在Web数据抓取(Webscraping)的过程中,用户从互联网上提取嵌入在网页中的信息,并将其保存为R中的数据结构以做进一步的分析。 完成这个任务的一种途径是使用函数 readLines()下载网页,然后使用如 grep() 和 gsub() 一类的函数处理它。对于结构复杂的网页,可以使用RCurl 包和 XML 包来提取其中想要的信息。更多信息和示例,请参考可在网站Programming with R(www.programmingr.com)上找到的“Webscraping using readLines and RCurl”一文。


数据库数据导入

    R中有多种面向关系型数据库管理系统 (DBMS) 的接口, 包括Microsoft SQL Server、 MicrosoftAccess、MySQL、Oracle、PostgreSQL、DB2、Sybase、Teradata以及SQLite。其中一些包通过原生的数据库驱动来提供访问功能,另一些则是通过ODBC或JDBC来实现访问的。使用R来访问存储在外部数据库中的数据是一种分析大数据集的有效手段,并且能够发挥SQL和R各自的优势。

    在R中通过 RODBC 包访问一个数据库也许是最流行的方式,这种方式允许R连接到任意一种拥有ODBC驱动的数据库,其实几乎就是市面上的所有数据库。第一步是针对你的系统和数据库类型安装和配置合适的ODBC驱动——它们并不是R的一部分。如果你的机器尚未安装必要的驱动,上网搜索一下应该就可以找到。针 对 选 择 的 数 据 库 安 装 并 配 置 好 驱 动 后 , 请 安 装 RODBC 包 。 你 可 以 使 用 命 令install.packages("RODBC") 来安装它。

    RODBC 包中的主要函数:


    
RODBC 包允许R和一个通过ODBC连接的SQL数据库之间进行双向通信。 这就意味着你不仅可以读取数据库中的数据到R中,同时也可以使用R修改数据库中的内容。假设你想将某个数据库中的两个表( Crime 和 Punishment )分别导入为R中的两个名为 crimedat 和 pundat 的数据框,可以通过如下代码完成这个任务:


    
这里首先载入了 RODBC 包,并通过一个已注册的数据源名称( mydsn )和用户名( rob )以及密码 ( aardvark ) 打开了一个ODBC数据库连接。 连接字符串被传递给 sqlFetch , 它将 Crime表复制到R数据框 crimedat 中。然后我们对 Punishment 表执行了SQL语句 select 并将结果保存到数据框 pundat 中。最后,我们关闭了连接。函数 sqlQuery() 非常强大,因为其中可以插入任意的有效SQL语句。这种灵活性赋予了你选择指定变量、对数据取子集、创建新变量,以及重编码和重命名现有变量的能力。

    DBI 包为访问数据库提供了一个通用且一致的客户端接口。构建于这个框架之上的 RJDBC 包提供了通过JDBC驱动访问数据库的方案。使用时请确保安装了针对你的系统和数据库的必要JDBC驱动。其他有用的、基于DBI的包有 RMySQL 、 ROracle 、 RPostgreSQL 和 RSQLite 。这些包都为对应的数据库提供了原生的数据库驱动,但可能不是在所有系统上都可用。详情请参阅CRAN(http://cran.r-project.org)上的相应文档。












 
R语言社区 更多文章 R与数据分析 初识R——新手上路 R语言帮助文档的获取 R包的使用 R中的数据结构 ——向量
猜您喜欢 谈谈分类器的损失函数(1) Atlas支持mysql的prepare特性吗 化繁为简的企业级 Git 管理实践(一):多分支子模块依赖管理 JavaScript初学者建议:不要去管浏览器兼容 线上操作零差错,优秀的DBA就该这么做!