標籤:
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格式,見圖片
R讀取MySql資料庫