reshape2 數據操作 數據融合( cast)


我們在做數據分析的時候,對數據進行操作也是一項極其重要的內容,這里我們同樣介紹強大包reshape2,其中的幾個函數,對數據進行操作cast和melt兩個函數絕對少不了。

首先是cast,把長型數據轉換成你想要的任何寬型數據,

dcast(data, formula, fun.aggregate = NULL, ..., margins = NULL, subset = NULL, fill = NULL, drop = TRUE, value.var = guess_value(data))

acast(data, formula, fun.aggregate = NULL, ..., margins = NULL, subset = NULL, fill = NULL, drop = TRUE, value.var = guess_value(data))

acast,dcast的區別在於輸出結果。acast 輸出結果為vector/matrix/array,dcast 輸出結果為data.frame。

參數:

data  要進行轉換的數據框

formula  用於轉換的公式

fun.aggregate   聚合函數,表達式為:行變量~列變量~三維變量~......,另外,.表示后面沒有數據列,…表示之前或之后的所有數據列

margins  用於添加邊界匯總數據

subset   用於添加過濾條件,需要載入plyr包

其他三個參數,用到的情況相對較少。

 

下面來看些具體的例子

先構建一個數據集

x<-data.frame(id=1:6,
              name=c("wang","zhang","li","chen","zhao","song"),
              shuxue=c(89,85,68,79,96,53),
              yuwen=c(77,68,86,87,92,63))
x

 

 

先使用melt函數對數據進行融化操作。

library(reshape2)
x1<-melt(x,id=c("id","name")) x1

可以看到數據已經變成了長型數據(melt函數后面詳細介紹)。

接下來就是對數據進行各種變型操作了。

acast(x1,id~variable)

dcast(x1,id~variable)

從以上兩個執行結果來看,可以看出acast和dcast的區別

這里acast輸出結果省略了id這個列,而dcast則輸出id列

acast(x1,id~name~variable)

三維的情況下acast輸出的是一個數組,而dcast則報錯,因為dcast輸出結果為數據框。

 

dcast(x1,id~variable,mean,margins=T)

 

可以看到,邊緣多了兩列匯總數據是對行列求平均的結果。

dcast(x1,id~variable,mean,margins=c("id"))

只對列求平均值,當然也可以只對行求平均值,把id改成variable就可以了。

library(plyr)
dcast(x1,id~variable,mean,subset=.(id==1|id==3))

這里subset的篩選功能強大可以進行各種各樣的篩選操作,類似filter的作用。

dcast(x1,id+name~variable)

數據還原成原來的樣子了。

dcast(x1,variable~name)

對行列進行對調。

acast(x1,variable~id+name)

到這里,我們已經着實體會了cast的強大,數據幾乎可以轉換成任何形式。

跟excel中的數據透視表功能類似。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM