R 语言实战 (2nd ed)(30):创建数据集 2.3.10&2.3.11

阅读数:15 2019 年 11 月 16 日 20:39

R语言实战(2nd ed)(30):创建数据集 2.3.10&2.3.11

内容简介
本书注重实用性,是一本全面而细致的 R 指南,高度概括了该软件和它的强大功能,展示了使用的统计示例,且对于难以用传统方法处理的凌乱、不完整和非正态的数据给出了优雅的处理方法。作者不仅仅探讨统计分析,还阐述了大量探索和展示数据的图形功能。新版做了大量更新和修正,新增了近 200 页内容,介绍数据挖掘、预测性分析和编程。
本书适合数据分析人员及 R 用户学习参考。

(导入 HDF5 数据)

HDF5(Hierarchical Data Format,分层数据格式)是一套用于管理超大型和结构极端复杂数据集的软件技术方案。rhdf5包为 R 提供了一个 HDF5 的接口。这个包在 Bioconductor 网站上而不是 CRAN 上提供。你可以用以下代码对之进行安装:

复制代码
source("http://bioconductor.org/biocLite.R")
biocLite("rhdf5")

像 XML 一样,HDF5 格式超出了本书的内容范围。如果想学习更多相关知识,可访问 HDF Group 网站( http://www.hdf5group.org/ )。由 Bernd Fischer 编写的 http://www.bioconductor.org/packages/release/bioc/vignettes/rhdf5/inst/doc/rhdf5.pdf 是一个rhdf5包的优秀指南。

(访问数据库管理系统)

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

1. ODBC 接口

在 R 中通过RODBC包访问一个数据库也许是最流行的方式,这种方式允许 R 连接到任意一种拥有 ODBC 驱动的数据库,这包含了前文所列的所有数据库。

第一步是针对你的系统和数据库类型安装和配置合适的 ODBC 驱动——它们并不是 R 的一部分。如果你的机器尚未安装必要的驱动,上网搜索一下应该就可以找到。

针对选择的数据库安装并配置好驱动后,请安装RODBC包。你可以使用命令install.packages("RODBC")来安装它。RODBC包中的主要函数列于表 2-3 中。

表 2-3 RODBC 中的函数

函数 描述
odbcConnect(dsn,uid="",pwd="") 建立一个到 ODBC 数据库的连接
sqlFetch(channel,sqltable) 读取 ODBC 数据库中的某个表到一个数据框中
sqlQuery(channel,query) 向 ODBC 数据库提交一个查询并返回结果
sqlSave(channel,mydf,tablename=sqtable,append=FALSE) 将数据框写入或更新(append=TRUE)到 ODBC 数据库的某个表中
sqlDrop(channel,sqtable) 删除 ODBC 数据库中的某个表
close(channel) 关闭连接

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

复制代码
library(RODBC)
myconn <-odbcConnect("mydsn", uid="Rob", pwd="aardvark")
crimedat <- sqlFetch(myconn, Crime)
pundat <- sqlQuery(myconn, "select * from Punishment")
close(myconn)

这里首先载入了RODBC包,并通过一个已注册的数据源名称(mydsn)和用户名(rob)以及密码(aardvark)打开了一个 ODBC 数据库连接。连接字符串被传递给sqlFetch(),它将 Crime 表复制到 R 数据框crimedat中。然后我们对 Punishment 表执行了 SQL 语句select并将结果保存到数据框pundat中。最后,我们关闭了连接。

函数sqlQuery()非常强大,因为其中可以插入任意的有效 SQL 语句。这种灵活性赋予了你选择指定变量、对数据取子集、创建新变量,以及重编码和重命名现有变量的能力。

2. DBI 相关包

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

评论

发布