欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

R語言 數(shù)據(jù)集行列互換的技巧分享

 更新時間:2021年03月27日 12:07:52   作者:數(shù)據(jù)蜂鳥  
這篇文章主要介紹了R語言 數(shù)據(jù)集行列互換的技巧分享,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

現(xiàn)在給大家介紹的數(shù)據(jù)處理技巧是長轉(zhuǎn)寬,也就相當(dāng)于Excel中的轉(zhuǎn)置,不過用R語言實(shí)現(xiàn)的長轉(zhuǎn)寬還有數(shù)據(jù)合并的功能,自然比Excel強(qiáng)大多了。

這里給大家介紹4個函數(shù),其中melt()、dcast()來自reshape2包,gather()、spread()來自tidyr包

一、寬轉(zhuǎn)長——melt()、gather()

mydata<-data.frame(
 name=c("store1","store2","store3","store4"),
 address=c("普陀區(qū)","黃浦區(qū)","徐匯區(qū)","浦東新區(qū)"),
 sale2014=c(3000,2500,2100,1000),
 sale2015=c(3020,2800,3900,2000),
 sale2016=c(5150,3600,2700,2500),
 sale2017=c(4450,4100,4000,3200)
)
#寬轉(zhuǎn)長——melt
mydata1<-melt(
 mydata,
 id.vars=c("address","name"),#要保留的主字段
 variable.name = "Year",#轉(zhuǎn)換后的分類字段名稱(維度)
 value.name = "Sale" #轉(zhuǎn)換后的度量值名稱
)

輸出結(jié)果

> mydata1<-melt(
+ mydata,
+ id.vars=c("address","name"),#要保留的主字段
+ variable.name = "Year",#轉(zhuǎn)換后的分類字段名稱(維度)
+ value.name = "Sale" #轉(zhuǎn)換后的度量值名稱
+ )
> mydata1
 address name  Year Sale
1 普陀區(qū) store1 sale2014 3000
2 黃浦區(qū) store2 sale2014 2500
3 徐匯區(qū) store3 sale2014 2100
4 浦東新區(qū) store4 sale2014 1000
5 普陀區(qū) store1 sale2015 3020
6 黃浦區(qū) store2 sale2015 2800
7 徐匯區(qū) store3 sale2015 3900
8 浦東新區(qū) store4 sale2015 2000
9 普陀區(qū) store1 sale2016 5150
10 黃浦區(qū) store2 sale2016 3600
11 徐匯區(qū) store3 sale2016 2700
12 浦東新區(qū) store4 sale2016 2500
13 普陀區(qū) store1 sale2017 4450
14 黃浦區(qū) store2 sale2017 4100
15 徐匯區(qū) store3 sale2017 4000
16 浦東新區(qū) store4 sale2017 3200

再來看看gather()函數(shù)怎么用

> #寬轉(zhuǎn)長——gather
> mydata1<-tidyr::gather(
+ data=mydata,
+ key="Year",
+ value="sale",
+ sale2014:sale2017
+ )
> mydata1
  name address  Year sale
1 store1 普陀區(qū) sale2014 3000
2 store2 黃浦區(qū) sale2014 2500
3 store3 徐匯區(qū) sale2014 2100
4 store4 浦東新區(qū) sale2014 1000
5 store1 普陀區(qū) sale2015 3020
6 store2 黃浦區(qū) sale2015 2800
7 store3 徐匯區(qū) sale2015 3900
8 store4 浦東新區(qū) sale2015 2000
9 store1 普陀區(qū) sale2016 5150
10 store2 黃浦區(qū) sale2016 3600
11 store3 徐匯區(qū) sale2016 2700
12 store4 浦東新區(qū) sale2016 2500
13 store1 普陀區(qū) sale2017 4450
14 store2 黃浦區(qū) sale2017 4100
15 store3 徐匯區(qū) sale2017 4000
16 store4 浦東新區(qū) sale2017 3200

和melt()函數(shù)不同,gather()函數(shù)需要指定關(guān)鍵字段key,以及關(guān)鍵字段對應(yīng)的值value,但是gather()函數(shù)更加好理解。

二、長轉(zhuǎn)寬——dcast()和spread()

還是用上面的data1數(shù)據(jù)集,先來看看dcast()函數(shù)

#長轉(zhuǎn)寬——dcast
dcast(
 data=mydata1,
 name+address~Year
 #左側(cè)是要保留的字段,右側(cè)是要分割的分類變量,列數(shù)等于表達(dá)式
 #右側(cè)分類變量的類別個數(shù)
)
> #長轉(zhuǎn)寬——dcast
> dcast(
+ data=mydata1,
+ name+address~Year
+ #左側(cè)是要保留的字段,右側(cè)是要分割的分類變量,列數(shù)等于表達(dá)式
+ #右側(cè)分類變量的類別個數(shù)
+ )
Using sale as value column: use value.var to override.
 name address sale2014 sale2015 sale2016 sale2017
1 store1 普陀區(qū)  3000  3020  5150  4450
2 store2 黃浦區(qū)  2500  2800  3600  4100
3 store3 徐匯區(qū)  2100  3900  2700  4000
4 store4 浦東新區(qū)  1000  2000  2500  3200

dcast()函數(shù)的使用規(guī)則需要琢磨下才能理解,大家好好看看注釋部分,再來看看spread()

#長轉(zhuǎn)寬——spread
tidyr::spread(
 data=mydata1,
 key=Year,
 value=sale
)
> #長轉(zhuǎn)寬——spread
> tidyr::spread(
+ data=mydata1,
+ key=Year,
+ value=sale
+ )
 name address sale2014 sale2015 sale2016 sale2017
1 store1 普陀區(qū)  3000  3020  5150  4450
2 store2 黃浦區(qū)  2500  2800  3600  4100
3 store3 徐匯區(qū)  2100  3900  2700  4000
4 store4 浦東新區(qū)  1000  2000  2500  3200

直接調(diào)用tidyr::spread,需要指定關(guān)鍵字段key和對應(yīng)的值value。

但是從理解上來看,我個人更喜歡tidyr包的函數(shù),使用很清晰,大家可以根據(jù)實(shí)際情況自行選擇,好啦,今天的分享結(jié)束,下次再見!

補(bǔ)充:利用R語言對數(shù)據(jù)行列轉(zhuǎn)制

使用軟件:R語言,mysql

使用系統(tǒng):ubuntu16.04

使用效果前后對比:

使用前

x1 x2 y
a A 1
b B 2
c C 3
a A 4

使用后(里面的數(shù)值可以進(jìn)行多種變換,主要是把x1,x2改為他們的交叉表)

A B C
a 5(1+4) NA NA
b NA 2 NA
c NA NA 3

1.R語言與mysql的數(shù)據(jù)庫連接

下載RMysql(由于我使用的是ubuntu,所以使用RMysql):

install.packages("RMySQL")

加載所需要的程輯包:

library(RMySQL)

將mysql數(shù)據(jù)導(dǎo)入R:

con<-dbConnect(MySQL(),dbname="database_name",user="user_name",password="password")

導(dǎo)入后,所得數(shù)據(jù)類型是數(shù)據(jù)框(data.frame)

對于RMySQL這個包,比較重要的語句有這幾個:

summary(con) : 用于查看con對應(yīng)的mysql信息

dbListTables(con) :用于查看con中的所有table

dbRemoveTable(con,”table_name”)

dbReadTable(con,”table_name”)

dbWriteTable(con,”table_name”,value) 其中value類型需要為數(shù)據(jù)框

2.在R中實(shí)現(xiàn)數(shù)據(jù)變換

我們使用以上的語句,讀取所需要變換的表

data=dbReadTable(con,"table_name")

然后使用一個重要的函數(shù):tapply()

注意,我下面使用的是我之前舉例所用的表

data2=tapply(data\$y,list(data\$x1,data$x2),sum)

對于tapply(x,list(a,b),fac)

a和b是形成交叉表的行列表頭

而x則是取值,我們當(dāng)然可以不使用data里面的值當(dāng)作x

fac則是對x進(jìn)行的函數(shù)運(yùn)算,比如使用sum,就是將相同的x1,x2的y相加

3.將數(shù)據(jù)導(dǎo)回mysql

上面我們已經(jīng)把數(shù)據(jù)變換為想要的表格形式了,不過,使用了tapply后,data2的類會變?yōu)榫仃?matrix),要想知道數(shù)據(jù)類型,在R中使用class()便可以查看,而我們所使用的RMySQL包將r中數(shù)據(jù)寫入mysql是需要用數(shù)據(jù)框的,所以我們要轉(zhuǎn)換矩陣為數(shù)據(jù)框,那么要怎么做呢,很簡單

data3=data.frame(data2)

這樣,我們的data3便是一個數(shù)據(jù)框了,使用語句

dbWriteTable(con,test,data3)

便寫入了一個table于mysql,名字叫做test,數(shù)據(jù)值為data3.

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • R語言boxplot函數(shù)深入講解

    R語言boxplot函數(shù)深入講解

    這篇文章主要介紹了R語言boxplot函數(shù)深入講解,文中圖文講解的很透徹,有感興趣的同學(xué)可以研究下
    2021-03-03
  • R語言 出現(xiàn)矩陣/缺失值的解決方案

    R語言 出現(xiàn)矩陣/缺失值的解決方案

    這篇文章主要介紹了R語言 出現(xiàn)矩陣/缺失值的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • R語言編程數(shù)學(xué)分析重讀微積分理解極限算法

    R語言編程數(shù)學(xué)分析重讀微積分理解極限算法

    這篇文章主要為大家介紹了R語言編程重讀微積分?jǐn)?shù)學(xué)分析理解極限算法的詳細(xì)過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • R語言將變量分組的3種方法實(shí)例(含cut函數(shù)說明)

    R語言將變量分組的3種方法實(shí)例(含cut函數(shù)說明)

    在數(shù)據(jù)處理分析過程中,變量分組是經(jīng)常遇到的,下面這篇文章主要給大家介紹了關(guān)于R語言將變量分組的3種方法,其中含cut函數(shù)說明的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • R語言變量級別的數(shù)據(jù)處理操作

    R語言變量級別的數(shù)據(jù)處理操作

    這篇文章主要介紹了R語言變量級別的數(shù)據(jù)處理操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 使用R語言批量修改文件名的方法

    使用R語言批量修改文件名的方法

    這篇文章主要介紹了使用R語言批量修改文件名的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 解決R語言報錯:Error?in?y?+?1:non-numeric?argument?to?binary?operator

    解決R語言報錯:Error?in?y?+?1:non-numeric?argument?to?binary

    R語言編程中的常見錯誤有一些錯誤是R的初學(xué)者和經(jīng)驗(yàn)豐富的R程序員都可能常犯的,下面這篇文章主要給大家介紹了關(guān)于解決R語言報錯:Error?in?y?+?1:non-numeric?argument?to?binary?operator的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • R語言 實(shí)現(xiàn)多行注釋的方式

    R語言 實(shí)現(xiàn)多行注釋的方式

    這篇文章主要介紹了R語言 實(shí)現(xiàn)多行注釋的方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 數(shù)模技巧不用for循環(huán)且使用ggplot2實(shí)現(xiàn)地圖上連線

    數(shù)模技巧不用for循環(huán)且使用ggplot2實(shí)現(xiàn)地圖上連線

    這篇文章主要為大家介紹了一個數(shù)模技巧怎樣使用ggplot2不用for循環(huán)來實(shí)現(xiàn)地圖上連線,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • R語言rmarkdown使用安裝教程

    R語言rmarkdown使用安裝教程

    markdown是文本處理的標(biāo)記語言,它的功能類似于word,但與word中各種排版、字體設(shè)置不同,markdown能使我們更專注于碼字這件事,用標(biāo)記語法來代替常見的排版格式,Rmarkdown基于R中的文本處理格式,這篇文章主要介紹了R語言rmarkdown使用安裝教程,需要的朋友可以參考下
    2024-02-02

最新評論