reshape2 数据操作 数据融合 (melt)
前面一篇講了cast,想必已經(jīng)見識(shí)到了reshape2的強(qiáng)大,當(dāng)然在使用cast時(shí)配合上melt這種強(qiáng)大的揉數(shù)據(jù)能力才能表現(xiàn)的淋漓盡致。
下面我們來看下,melt這個(gè)函數(shù)以及它的特點(diǎn)。
melt(data, ..., na.rm = FALSE, value.name = "value")
從這里來看函數(shù)的參數(shù)也相對(duì)比較簡(jiǎn)單,data表示要處理的數(shù)據(jù),na.rm表示缺失值處理辦法,value.name用于重命名值所在列的名稱
另外,melt函數(shù)的難點(diǎn)在于,不同數(shù)據(jù)結(jié)構(gòu),用到的參數(shù)可能是不一樣的。
首先,要融合的數(shù)據(jù)為數(shù)組、表以及矩陣,那么melt的表達(dá)式為:
melt(data, varnames = names(dimnames(data)), ..., na.rm = FALSE, as.is = FALSE, value.name = "value")
varnames用戶命名變量名稱
其次,要融合的數(shù)據(jù)為數(shù)據(jù)框,那么melt的表達(dá)式為:
melt(data, id.vars, measure.vars, variable.name = "variable", ..., na.rm = FALSE, value.name = "value", factorsAsStrings = TRUE)
id.vars 設(shè)置融合后單獨(dú)顯示的變量,可以用變量位置及名稱表示,沒寫表示使用所有非measure.vars值
measure.vars 通常根據(jù)id.vars 設(shè)置的變化而變化
最后,要融合的數(shù)據(jù)為列表,那么melt的表達(dá)式為:
melt(data, ..., level = 1)
下面來看些具體的例子
data<- array(c(1:22, NA,"wo"), c(2,3,4)) data
melt(data)
可以看出數(shù)據(jù)融合后,可讀性比數(shù)組的情況下強(qiáng)了好多,var1表示數(shù)組的行,var2表示數(shù)組的列,var3表示數(shù)組序列。
比如,18位置就是第3數(shù)組,2行3列的位置,11則是第2數(shù)組,1行3列。
melt(a, na.rm = TRUE)
可以看到數(shù)組中的缺失值被移除了。
melt(data, varnames=c("hang","lie","Zu"))
對(duì)融合后的每個(gè)變量進(jìn)行重命名。
下面來看下數(shù)據(jù)為數(shù)據(jù)框的情況。
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(x,id=c("id","name"))
melt(x,id=1:2,variable.name="kemu",value.name="zhi")
melt(x,measure.vars=c("id","name"))
最后,來看下如果數(shù)據(jù)是列表的情況
shuju<- list(matrix(1:4, ncol=2), array(1:27, c(3,3,3)))
shuju
這個(gè)列表的機(jī)構(gòu)比較復(fù)雜,讀起來有點(diǎn)難度
下面melt融合后的結(jié)果
melt(shuju)
可以看出數(shù)據(jù)變得非常簡(jiǎn)潔。
總結(jié)
以上是生活随笔為你收集整理的reshape2 数据操作 数据融合 (melt)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DMRS、DRS、SRS、CRS各自作用
- 下一篇: 集群IMC策略