R语言调用MySQL数据库及R的自动更新

来源:互联网 发布:安卓改机软件 编辑:程序博客网 时间:2024/06/15 21:05
首先我相信大多数人之所以不会用R调用数据库不是因为R语句不会写, 毕竟互联网这么方便,找度娘都能随便找到一堆代码。问题关键是出在了调用时找不到数据库,而这个问题网上恰恰很难找到合适的答案,所以我就在这里贴一下,因为我也是这么过来的。
1.首先呢,做好预备工作:打开R软件,安装好R的RODBC包(你也可以用其它的,都是雷同的,先调试好一个其他的就都会了,我最后也会列举出来)
2.然后,我们就要在http://dev.mysql.com/downloads/connector/odbc下载好connectorsODBC(对应你自己的电脑系统型号下载最新的就行了)
3.接着我们就要进行设置(我用的是Windows):控制面板->管理工具->数据源(ODBC)->双击->添加->选中mysql ODBC driver,检查用户数据源中是否有Rdata(驱动是MySQL ODBC),双击进去进行配置,主要是设置好user和password,并选中你要调用的数据表,其它选项默认就行,弄完之后不要急着去用R来调用,尽量先用MySQL查看确认下数据库对应的数据表是否存在,一切准备就绪之后就开始在R中调用了:
4. R语句调用数据库
library(RODBC)#加载程序包RODBC
myconn<-odbcConnect("Rdata",uid="root",pwd="123456")#链接数据库
data1<-sqlFetch(myconn,"news")#读数据表
head(data1)
data2<-sqlQuery(myconn,"select id,title from news")#用sql语言来读数据表
head(data2)

#其他函数
odbcDataSources()#查看可用的数据源
sqlTables(myconn)#查询该数据库下都有哪些数据库表
sqlSave(myconn, student1,addPK = TRUE)#将数据框student1保存到数据库中,表名即为student1
sqlDrop(myconn,"student1")#删除表student1

close(myconn)


#第二种:RJDBC(转载)
library(RJDBC)
library(RPostgreSQL)
#连接数据库
db.drv<-PostgreSQL()
#host是主机地址,port是端口号
#dbname应该是数据库驱动的名称,更改步骤见https://www.douban.com/note/172387172/ 中的第二步配置数据源

db.conn<-dbConnect(db.drv,host="localhost",port=3306,dbname="MYSQL",user="root",password="123456")
dbListTables(db.conn)#数据库列表
#创建新表
n1<-50;n2<-40;n3<-30
sales<-data.frame(trans_id=seq_len(n1),cust_id=sample.int(n2,n1,TRUE),store_id=sample.int(n3,n1,TRUE))
dbWriteTable(db.conn,"sales",sales)
trans_len<-rpois(n1,3)+1L
trans_items<-data.frame(trans_id=rep.int(seq_len(n1),trans_len),item_id=unlist(lapply(trans_len,sample.int,n=n1)),price=exp(rnorm(sum(trans_len))))
dbWriteTable(db.conn,"trans_items",trans_items)
#R在数据库中进行操作
res1<-dbGetQuery(db.conn,'SELECT store_id,price
  FROM sales INNER JOIN trans_items USING (trans_id);'
)
res11<-tapply(res1$price,res1$store_id,sum)
res2<-dbGetQuery(db.conn,'SELECT store_id,SUM(price) as total_sales
  FROM sales INNER JOIN trans_items USING (trans_id)
  GROUP BY store_id
  ORDER BY spending DESC
  LIMIT 10;'
)


#第三种:dplyr(转载)
library(dplyr)
#连接数据库
db.conn<-src_postgres(dbname="MYSQL",host="localhost",port=3306,user="root",password="123456")
sales.tb<-tbl(db.conn,"sales")
trans_items.tb<-tbl(db.conn,"trans_items")
#操作数据库
joint.db<-inner_join(sales.tb,trans_items.tb,by="trans_id")
cust_items<-group_by(joint.db,cust_id)
cust_spending<-summarize(cust_items,spending=sum(price))
cust_spending1<-arrange(cust_spending,desc(spending))
cust_spending2<-select(cust_spending1,cust_id,spending)


#最后呢,最近有些童鞋们会问我R更新的话只能卸了重装吗?那肯定是否定的,毕竟你能想到的一般都会有人提前想到(毕竟咱不是天才),所以在这里也贴出来方便有需要的童鞋
install.packages("installr")
require(installr)
updateR()#R的更新(不用卸载再重装),但是要注意的是此时不能用RStudio来更新了,只能用R控制台来执行,执行到后面会有一些提示(比如更新package),都能看的懂就不在这里说明了








1 0
原创粉丝点击