把R里面的数据导入到mysql数据库的两种方式


1、包 DBI 和 RMySQL 

dbReadTabledbWriteTable实现一个 R 数据框的复制进和复制出数据库,把数据框的行名字映射到 MySQL 表的row_names 字段


> library(RMySQL) # will load DBI as well
     ## 打开一个MySQL数据库的连接
     > con <- dbConnect(dbDriver("MySQL"), dbname = "test")
     ## 列出数据库中表
     > dbListTables(con)
     ## 把一个数据框导入到数据库,删除任何已经存在的拷贝
     > data(USArrests)
     > dbWriteTable(con, "arrests", USArrests, overwrite = TRUE)
     TRUE
     > dbListTables(con)
     [1] "arrests"
     ## 获得整个表
     > dbReadTable(con, "arrests")
                    Murder Assault UrbanPop Rape
     Alabama          13.2     236       58 21.2
     Alaska           10.0     263       48 44.5
     Arizona           8.1     294       80 31.0
     Arkansas          8.8     190       50 19.5
     ...
     ## 从导入的表中查询
     > dbGetQuery(con, paste("select row_names, Murder from arrests",
                             "where Rape > 30 order by Murder"))
        row_names Murder
     1   Colorado    7.9
     2    Arizona    8.1
     3 California    9.0
     4     Alaska   10.0
     5 New Mexico   11.4
     6   Michigan   12.1
     7     Nevada   12.2
     8    Florida   15.4
     > dbRemoveTable(con, "arrests")
     > dbDisconnect(con)

2 包 RODBC

这里是用PostgreSQL的一个例子,其中ODBC 驱动把列和数据框的名字映射成小写。我们用一个事先创建的数据库testdb,还有一个个设置在unixODBC下文件 ~/.odbc.ini的数据源名字(Data Source Name,DSN)。同样的代码在MyODBC访问Linux或Windows上的MySQL数据库时一样有效(其中,MySQL依然会把名字映射成小写)。在 Windows,DSN在控制面板的 ODBC 工具里面设置(在Windows 2000/XP,设置`管理工具'部分的`数据源(ODBC)')。

     > library(RODBC)
     ## 让函数把名字映射成小写
     > channel <- odbcConnect("testdb", uid="ripley", case="tolower")
     ## 把一个数据框导入数据库
     > data(USArrests)
     > sqlSave(channel, USArrests, rownames = "state", addPK = TRUE)
     > rm(USArrests)
     ## 列出数据库的表
     > sqlTables(channel)
       TABLE_QUALIFIER TABLE_OWNER TABLE_NAME TABLE_TYPE REMARKS
     1                              usarrests      TABLE
     ## 列出表格
     > sqlFetch(channel, "USArrests", rownames = "state")
                    murder assault urbanpop rape
     Alabama          13.2     236       58 21.2
     Alaska           10.0     263       48 44.5
         ...
     ## SQL查询,原先是在一行的
     > sqlQuery(channel, "select state, murder from USArrests
                where rape > 30 order by murder")
            state murder
     1 Colorado      7.9
     2 Arizona       8.1
     3 California    9.0
     4 Alaska       10.0
     5 New Mexico   11.4
     6 Michigan     12.1
     7 Nevada       12.2
     8 Florida      15.4
     ## 删除表
     > sqlDrop(channel, "USArrests")
     ## 关闭连接
     > odbcClose(channel)

作为 Windows下面用 ODBC 连接 Excel电子表格的一个简单例子,我们可以如下读取电子表格

     > library(RODBC)
     > channel <- odbcConnectExcel("bdr.xls")
     ## 列出电子表格
     > sqlTables(channel)
       TABLE_CAT TABLE_SCHEM        TABLE_NAME   TABLE_TYPE REMARKS
     1 C:\\bdr            NA           Sheet1$ SYSTEM TABLE      NA
     2 C:\\bdr            NA           Sheet2$ SYSTEM TABLE      NA
     3 C:\\bdr            NA           Sheet3$ SYSTEM TABLE      NA
     4 C:\\bdr            NA Sheet1$Print_Area        TABLE      NA
     ## 获得表单1的内容,可以用下面任何一种方式
     > sh1 <- sqlFetch(channel, "Sheet1")
     > sh1 <- sqlQuery(channel, "select * from [Sheet1$]")
注意,数据库表的规范和 sqlTables 返回的名字是不一样的: sqlFetch 可以映射这种差异。



详见 :http://www.biosino.org/R/R-doc/onepage/R-data_cn.html

你可能感兴趣的:(R语言)