reshape2 數(shù)據(jù)操作 數(shù)據(jù)融合( cast)
我們?cè)谧鰯?shù)據(jù)分析的時(shí)候,對(duì)數(shù)據(jù)進(jìn)行操作也是一項(xiàng)極其重要的內(nèi)容,這里我們同樣介紹強(qiáng)大包reshape2,其中的幾個(gè)函數(shù),對(duì)數(shù)據(jù)進(jìn)行操作cast和melt兩個(gè)函數(shù)絕對(duì)少不了。
首先是cast,把長(zhǎng)型數(shù)據(jù)轉(zhuǎn)換成你想要的任何寬型數(shù)據(jù),
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的區(qū)別在于輸出結(jié)果。acast 輸出結(jié)果為vector/matrix/array,dcast 輸出結(jié)果為data.frame。
參數(shù):
data ?要進(jìn)行轉(zhuǎn)換的數(shù)據(jù)框
formula ?用于轉(zhuǎn)換的公式
fun.aggregate ? 聚合函數(shù),表達(dá)式為:行變量~列變量~三維變量~......,另外,.表示后面沒(méi)有數(shù)據(jù)列,…表示之前或之后的所有數(shù)據(jù)列
margins ?用于添加邊界匯總數(shù)據(jù)
subset ? 用于添加過(guò)濾條件,需要載入plyr包
其他三個(gè)參數(shù),用到的情況相對(duì)較少。
下面來(lái)看些具體的例子
先構(gòu)建一個(gè)數(shù)據(jù)集
1
2
3
4
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))<br>x

先使用melt函數(shù)對(duì)數(shù)據(jù)進(jìn)行融化操作。
1
2
3
library(reshape2)<br>x1<-melt(x,id=c("id","name"))
x1

可以看到數(shù)據(jù)已經(jīng)變成了長(zhǎng)型數(shù)據(jù)(melt函數(shù)后面詳細(xì)介紹)。
接下來(lái)就是對(duì)數(shù)據(jù)進(jìn)行各種變型操作了。
1acast(x1,id~variable)

1dcast(x1,id~variable)

從以上兩個(gè)執(zhí)行結(jié)果來(lái)看,可以看出acast和dcast的區(qū)別
這里acast輸出結(jié)果省略了id這個(gè)列,而dcast則輸出id列
1acast(x1,id~name~variable)

三維的情況下acast輸出的是一個(gè)數(shù)組,而dcast則報(bào)錯(cuò),因?yàn)閐cast輸出結(jié)果為數(shù)據(jù)框。
1dcast(x1,id~variable,mean,margins=T)

可以看到,邊緣多了兩列匯總數(shù)據(jù)是對(duì)行列求平均的結(jié)果。
1dcast(x1,id~variable,mean,margins=c("id"))

只對(duì)列求平均值,當(dāng)然也可以只對(duì)行求平均值,把id改成variable就可以了。
1
2
library(plyr)
dcast(x1,id~variable,mean,subset=.(id==1|id==3))

這里subset的篩選功能強(qiáng)大可以進(jìn)行各種各樣的篩選操作,類(lèi)似filter的作用。
1dcast(x1,id+name~variable)

數(shù)據(jù)還原成原來(lái)的樣子了。
1dcast(x1,variable~name)

對(duì)行列進(jìn)行對(duì)調(diào)。
1acast(x1,variable~id+name)

到這里,我們已經(jīng)著實(shí)體會(huì)了cast的強(qiáng)大,數(shù)據(jù)幾乎可以轉(zhuǎn)換成任何形式。
跟excel中的數(shù)據(jù)透視表功能類(lèi)似。reshape2 數(shù)據(jù)操作 數(shù)據(jù)融合( cast) - molearner - 博客園