R语言笔记







得到连接时还要制定账号密码:coon <- dbConnect(drv,"jdbc:mysql://localhost/mybase","root","123456")




RMysql包是一个不错的工具。 简单示例1:

install.packages("RMySQL")
library(RMySQL)
conn <- dbConnect(MySQL(), dbname = "test1", username="root", password="123456", host="127.0.0.1", port=3306)
#创建数据库表并写入数据
dbWriteTable(conn, "mtcars", mtcars[1:10, ],append=T)
#往数据库库表中添加数据
dbWriteTable(conn, "mtcars", mtcars[11:20, ],append=T)
#往数据库库表中覆盖数据,表中元数据将清空
dbWriteTable(conn, "mtcars", mtcars[21:30, ],overwrite=T)
#查询表中数据
dbReadTable(conn, "mtcars")

#查询某张表是否存在
dbExistsTable(conn,"mtcars")
#列出数据库中所有表
dbListTables(conn)
#使用sql查询语句
dbGetQuery(conn,"select mpg from mtcars where mpg>15")
#列出某张表中的所有字段名称
dbListFields(conn,"mtcars")
dbListResults(conn,"select * from mtcars")
#删除数据库表
dbRemoveTable(conn,"mtcars")
#列出连接数据库相关信息
dbGetInfo(conn)
#关闭连接
dbDisconnect(conn)

RMysql存储和查询中文字符时的问题及解决方法

环境:win7
mysql数据库字符集:utf8
RStudio编辑器环境:utf8

Q1:当存储含有中文的frame时,报错

> dbWriteTable(conn,"fruits",fruits,overwrite=T)
Error in .local(conn, statement, ...) : 
  could not run statement: Invalid utf8 character string: '苹'

尝试了很多解决方法,都不好用。以下介绍一种好用的解决方法:把数据库的字符集改为gbk

create database rtest DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

这样再连接这个数据库时,就可以正常存储含有中文字符的数据了。

Q2:查询数据库数据时,中文显示乱码

> sb<-dbGetQuery(conn,"select * from new_table")
> head(sb)
  row_names   code         name            industry area
1    600000 600000  娴﹀彂閾惰               閾惰   SH
2    600004 600004 鐧戒簯鏈哄満         鏈哄満鑸繍   SH
3    600006 600006  涓滈姹借溅        姹借溅鏁磋溅   SH

解决方法:

> dbSendQuery(conn,"SET NAMES gbk")
<MySQLResult:-1912957498,2,6>
> sb<-dbGetQuery(conn,"select * from new_table")
> head(sb)
  row_names   code     name     industry area
1    600000 600000 浦发银行         银行   SH
2    600004 600004 白云机场     机场航运   SH
3    600006 600006 东风汽车     汽车整车   SH

通过以上方法,就可以很好的处理中文内容了。也可以看出RStudio对utf8的支持并不好。



R与Mysql数据库连接的两种方法

方法一:RODBC包

R中的RODBC包在Linux和Windows系统下都能运行。所以,使用这个包可以把R连接到所有的数据库系统。下面以连接Mysql为例(在Windows系统下)。

使用RODBC连接数据库需要下载相应的数据库ODBC接口。具体安装和配置流程如下:

  1. http://dev.mysql.com/downloads/connector/odbc
    下载mySQL ODBC,安装好。

  2. windows:控制面板->管理工具->数据源(ODBC)->双击->添加->选中mysql ODBC driver一项填写:data source name 一项填入你要使用的名字,自己随便命名例如:mysql_data

  3. description一项随意填写,例如mydata。TCP/IP Server 填写服务器IP,本地数据库一般为:127.0.0.1。 user 填写你的mysql用户名,password 填写你的mysql密码。然后数据库里会出现你的mysql里的所有数据库,选择一个数据库。确定。

下面进行示例操作:


    install.packages("RODBC")
    library(RODBC)
    
    #我的mysql用户名是root,密码是123456
    channel <- odbcConnect("mysql_data", uid = "root", pwd = "123456")
    sqlTables(channel)  #查看你在上面所选数据库中的所有表
    data <- sqlFetch(channel, "users")  #将使用的数据库中的表users连接到R,这样就实现了在R中操作数据库中的数据
    sqlSave(channel, mtcars) #将R中的数据存储到Mysql
    sq <- sqlQuery(channel, "select mpg from mtcars")  #在R中通过sql语句提取数据

关于中文乱码问题:

第一张图片是在mysql中乱码,第二张图片是将R中包含中文的数据写入到mysql时乱码。首先查看当前数据库字符编码集:show variables like '%character%'

解决办法:在mysql安装目录下有个my.ini文件,将default-character-set=utf8 改为 default-character-set=gbk ,重新启动 MySQL 服务即可。当然,R或Rstudio也要重新启动

方法二:RMySQL包


    install.packages("RMySQL")
    library(RMySQL)
    
    channel <- dbConnect(MySQL(),
                         user="root", #用户名
                         password="123456", #密码
                         dbname="test", #数据库名称
                         host="localhost") #主机地址
    dbListTables(channel) #查看数据库中的所有表
    headmt <- head(mtcars)
    dbWriteTable(channel, "headmt", headmt) #将R中的数据写入mysql
    headmt <- dbReadTable(channel, "headmt") #将数据库中数据读入到R
    dbGetQuery(channel, "select * from headmt where cyl = 6")  #查询数据

在数据集包含中文的情况下,跟RODBC包不同的是,即使你已经修改my.ini文件default-character-set=gbk。用RMySQL包中的dbWriteTable函数将R中的数据写入mysql以及用dbReadTable函数将数据库中数据读入到R时均失败。此时只需在R中通过命令dbSendQuery(channel, "SET NAMES gbk")设置GBK字符集即可



1、使用R数据库接口

连接MySQL,使用RMySQL包,使用前RMySQL包要先安装。

library(RMySQL)

连接方式有2种:

(1)使用dbConnect
conn <- dbConnect(MySQL(), dbname = "rmysql", username="rmysql", password="rmysql", host="127.0.0.1", port=3306)

数据操作方法:

dbWriteTable(conn, "tablename", data) #写表
dbReadTable(conn, "tablename")  #读表
dbDisconnect(conn) #关闭连接

(2)使用sqldf包

首先要安装sqldf包,其次调用:

>library(sqldf)

> sqldf("select * from t_data",dbname="test",drv="MySQL",user="root",password="",host="127.0.0.1",port=3306)

连接后,SQL查询语句后面的参数均可省略,例如:

> sqldf("select * from t_data limit 0,10")


2、使用ODBC连接

在Windows下配置ODBC(开放数据库连接),具体步骤如下:
(1)R下载RODBC包,安装好。
(2)在http://dev.mysql.com/downloads/connector/odbc下载mySQL ODBC,安装好。
(3)Windows:控制面板->管理工具->数据源(ODBC)->双击->添加->选中mysqlODBC driver一项
填写:data source name 一项填入你要使用的名字,自己随便命名,例如:mysql_data;
description一项随意填写,例如mydata
TCP/IP Server 填写本机服务器IP,一般为:127.0.0.1
user 填写你的mysql用户名
password 填写你的mysql密码
然后数据库里会出现你的mysql里的所有数据库,选择一个数据库。
确定。
(4)打开R的界面调用数据库:

library(RODBC); 

channel <- odbcConnect("mysql_data", uid="root", pwd="123"); 

sqlTables(channel);#查看数据中的表 

data<-sqlFetch(channel,"kegg")# 查看表的内容,存到数据框里 


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页