❝用r語言做資料分析時,常常需要從多種資料來源取資料,其中資料庫是非常常見的資料來源。用r操作mysql資料庫,可以說是資料分析師必備的技能了,本文介紹rmysql包,可以在r語言中對資料庫進行增刪改查的操作。❞
install.packages('rmysql')
用dbconnect
函式建立連線,驅動型別設定為mysql()
,使用者名稱user
、密碼password
、主機host
、埠port
、資料庫dbname
這些引數需要根據實際情況修改,其中埠port
預設值是3306。
# 載入包
library(rmysql)
# 建立連線
con
user="root",
password="***",
host="192.168.1.244",
port=3306,
dbname="test")
還可以通過一些命令,檢視連線的相關資訊。
# 連線概述
summary(con)
## ## user: root
## host: 192.168.1.244
## dbname: test
## connection type: 192.168.1.244 via tcp/ip
#### results:
# 連線詳情
dbgetinfo(con)
## $host
## [1] "192.168.1.244"
#### $user
## [1] "root"
#### $dbname
## [1] "test"
#### $contype
## [1] "192.168.1.244 via tcp/ip"
#### $serverversion
## [1] "5.7.23"
#### $protocolversion
## [1] 10
#### $threadid
## [1] 465075
#### $rsid
## list()
# 列出連線下所有表
dblisttables(con)
## [1] "city" "result"
## [3] "t_json" "tb_newchiller"
# 方法1:字元向量
dbcreatetable(con,'table1',fields =c("id"='int',"value"="float"))
# 方法2:資料框
dbcreatetable(con,'table2',fields = mtcars)
注意點:
設定fields
引數時,用命名的字元向量(名字為欄位名,值為字段資料型別)或資料框表示
表只能建立一次,重複建立會報錯。
執行dbsendquery
函式,呼叫sql語句建立表,該函式返回乙個rmysqlresult類。該方法可以重複執行,不會報錯。
# 方法3:sql語句
dbsendquery(con,'create table if not exists table3(id int,value float)')
##
# 先設定編碼(windows)
dbsendquery(con,'set names gbk')
## # 讀取完整表
dbreadtable(con,'city')
## id name city_code
## 1 1 北京 000001
## 2 4 南京 000002
## 3 7 廣州 000003
## 4 10 上海 000004
## 5 11 深圳 000005
## 6 13 蘇州 000006
注意點:
返回的是整個表的資料
為解決中文顯示問題,若執行r的作業系統為window,需要設定編碼為gbk
,為linux則需要設定為utf8
返回的資料格式為data.frame
通過執行dbgetquery
或dbsendquery
函式,呼叫sql語句讀取表。dbgetquery
函式執行sql語句,返回data.frame。可以在sql語句中編寫篩選語句。
# 讀取完整表
dbgetquery(con,'select * from city')
## id name city_code
## 1 1 北京 000001
## 2 4 南京 000002
## 3 7 廣州 000003
## 4 10 上海 000004
## 5 11 深圳 000005
## 6 13 蘇州 000006
# 讀取篩選的表
dbgetquery(con,'select id,name from city where id > 10')
## id name
## 1 11 深圳
## 2 13 蘇州
dbsendquery
函式執行sql語句,返回mysqlresult類。對該類使用dbfetch
函式,可以篩選行,返回data.frame。用完後需要用dbclearresult
函式清理結果。
# 篩選前3行資料
res
dbfetch(res,3)
## id name city_code
## 1 1 北京 000001
## 2 4 南京 000002
## 3 7 廣州 000003
dbclearresult(res)
## [1] true
# 寫入表
## [1] true
注意點:
第一次寫入時,若資料庫中無該表,會根據表名自動建立
重複寫入時,需要設定寫入行為:
執行dbsendstatment
函式,呼叫sql語句插入資料。
dbsendstatement(con,'insert into table1 values(1,12)')
##
注意點:
重複執行會重複插入資料
用dbremovetable
函式刪除表。
# 刪除表
dbremovetable(con,'table1')
## [1] true
dbremovetable(con,'table2')
## [1] true
dbremovetable(con,'table3')
## [1] true
dbremovetable(con,'iris')
## [1] true
完成所有的操作後,需要關閉連線。
# 關閉連線
R語言檔案操作
path j lab ex29 在r語言中進行檔案 夾 操作 setwd path cat file a n file a 建立乙個檔案a,檔案內容是 file a n 表示換行,這是乙個很 好的習慣 cat file b n file b 建立乙個檔案b 有空行file.create a 建立乙個...
R語言 集合操作
在實際工作中,我們經常需要進行一些集合運算,在r中怎麼實現呢?當然用不著寫for或者while迴圈那麼複雜了,r已經為我們提供了非常強大的集合運算系列函式,下面就簡單的介紹一下這些函式 假設a,b,c為三個集合 首先對集合a,b,c賦值 a 1 10 b seq 5,15,2 c 1 5 求a和b的...
R語言 資料操作
1 顯示工作區間所有物件ls 或objects 2 清空空間中的物件 rm 3 給物件賦值 1 輸出資料型別 class is.資料型別.判斷是否為此資料型別 可以用method is 檢視is的所有方法 2 四種資料屬性 3 資料缺失 即資料為空用na表示 一張圖看懂r語言變數的基本型別 一維 向...