R中有多种面向关系型数据库管理系统(DBMS)的接口,包括Microsoft SQL Server、Microsoft
Access、 MySQL、 Oracle、 PostgreSQL、 DB2、 Sybase、 Teradata以及SQLite。其中一些包通过原
生的数据库驱动来提供访问功能,另一些则是通过ODBC或JDBC来实现访问的。使用R来访问存
储在外部数据库中的数据是一种分析大数据集的有效手段,并且能够发挥SQL和R各自的优势。
(1)R通过ODBC连接数据库
在R中通过RODBC包访问一个数据库也许是最流行的方式,这种方式允许R连接到任意一种
拥有ODBC驱动的数据库,其实几乎就是市面上的所有数据库。
第一步是针对你的系统和数据库类型安装和配置合适的ODBC驱动——它们并不是R的一部
分。如果你的机器尚未安装必要的驱动,上网搜索一下应该就可以找到。
针对选择的数据库安装并配置好驱动后,请安装RODBC包。你可以使用命令
install.packages("RODBC")来安装它。
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修改数据库中的内容。
library(RODBC)
myconn <- odbcConnect("mysqldata",uid="root",pwd="admin")
crimedat <- sqlFetch(myconn,Crime)
pundat <- sqlQuery(myconn,"select * from Punishment")
close(myconn)
这里首先载入了RODBC包,并通过一个已注册的数据源名称(mysqldata)和用户名(root)以
及密码(admin)打开了一个ODBC数据库连接。连接字符串被传递给sqlFetch,它将Crime表复制到R数据框crimedat中。然后我们对Punishment表执行了SQL语句select并将结果保
存到数据框pundat中。最后,我们关闭了连接。
函数sqlQuery()非常强大,因为其中可以插入任意的有效SQL语句。这种灵活性赋予了你
选择指定变量、对数据取子集、创建新变量,以及重编码和重命名现有变量的能力。
(2)R读取MySql数据乱码问题解决
在配置ODBC时,在Details里选择中文字符gbk格式,见图片