利用R語言對資料行列轉制
阿新 • • 發佈:2019-01-02
使用軟體:R語言,mysql
使用系統:ubuntu16.04
- 使用效果前後對比:
使用前
x1 | x2 | y |
---|---|---|
a | A | 1 |
b | B | 2 |
c | C | 3 |
a | A | 4 |
使用後(裡面的數值可以進行多種變換,主要是把x1,x2改為他們的交叉表)
A | B | C | |
---|---|---|---|
a | 5(1+4) | NA | NA |
b | NA | 2 | NA |
c | NA | NA | 3 |
1.R語言與mysql的資料庫連線
下載RMysql(由於我使用的是ubuntu,所以使用RMysql):
install.packages("RMySQL")
-
載入所需要的程輯包:
library(RMySQL)
將mysql資料匯入R:
con<-dbConnect(MySQL(),dbname="database_name",user="user_name",password="password")
匯入後,所得資料型別是資料框(data.frame)
對於RMySQL這個包,比較重要的語句有這幾個:
- summary(con) : 用於檢視con對應的mysql資訊
- dbListTables(con) :用於檢視con中的所有table
- dbRemoveTable(con,”table_name”)
- dbReadTable(con,”table_name”)
- dbWriteTable(con,”table_name”,value) 其中value型別需要為資料框
2.在R中實現資料變換
我們使用以上的語句,讀取所需要變換的表
data=dbReadTable(con,"table_name")
然後使用一個重要的函式:tapply()
- 注意,我下面使用的是我之前舉例所用的表
data2=tapply(data\$y,list(data\$x1,data$x2),sum)
對於tapply(x,list(a,b),fac)
a和b是形成交叉表的行列表頭
而x則是取值,我們當然可以不使用data裡面的值當作x
fac則是對x進行的函式運算,比如使用sum,就是將相同的x1,x2的y相加
3.將資料導回mysql
上面我們已經把資料變換為想要的表格形式了,不過,使用了tapply後,data2的類會變為矩陣(matrix),要想知道資料型別,在R中使用class()
便可以檢視,而我們所使用的RMySQL包將r中資料寫入mysql是需要用資料框的,所以我們要轉換矩陣為資料框,那麼要怎麼做呢,很簡單
data3=data.frame(data2)
這樣,我們的data3便是一個數據框了,使用語句
dbWriteTable(con,test,data3)
便寫入了一個table於mysql,名字叫做test,資料值為data3.