reshape2

1. 安裝導(dǎo)入reshape2

install.packages("reshape2")
library(reshape2)

2. 認(rèn)識(shí)長(zhǎng)數(shù)據(jù)與寬數(shù)據(jù)

寬數(shù)據(jù)是我們常見(jiàn)的數(shù)據(jù)集格式,因?yàn)檫@種格式符合數(shù)據(jù)收集的習(xí)慣和標(biāo)準(zhǔn)舵鳞,數(shù)據(jù)集的每一列為一個(gè)觀測(cè)變量,每一行為一組所有觀測(cè)變量的觀測(cè)值蚯嫌。寬數(shù)據(jù)格式看重的是一次觀測(cè)的各個(gè)變量相對(duì)應(yīng)的觀測(cè)值渠概,所以各個(gè)變量是重點(diǎn),而變量數(shù)目一般會(huì)比觀測(cè)數(shù)多舶替,這樣就顯得數(shù)據(jù)集較寬令境,故稱(chēng)為寬數(shù)據(jù)。

> head(airquality)
  Ozone Solar.R Wind Temp Month Day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
3    12     149 12.6   74     5   3
4    18     313 11.5   62     5   4
5    NA      NA 14.3   56     5   5
6    28      NA 14.9   66     5   6

長(zhǎng)數(shù)據(jù)長(zhǎng)數(shù)據(jù)有兩個(gè)特殊的列:variable和value顾瞪,variable列用于存放觀測(cè)變量舔庶,value列用于存放觀測(cè)變量對(duì)應(yīng)的觀測(cè)值。長(zhǎng)數(shù)據(jù)格式用其特有的variable列和value列將觀測(cè)結(jié)果細(xì)分陈醒,這在我們對(duì)單個(gè)變量進(jìn)行分析而不是對(duì)所有變量進(jìn)行分析時(shí)會(huì)簡(jiǎn)便得多惕橙,因其將每一個(gè)觀測(cè)變量的觀測(cè)值分開(kāi)存儲(chǔ),造成variable列和value列較長(zhǎng)钉跷,以致整個(gè)數(shù)據(jù)集顯得較長(zhǎng)弥鹦,故稱(chēng)為長(zhǎng)數(shù)據(jù)。

> data1 <- melt(airquality)
> head(data1)
  variable value
1    Ozone    41
2    Ozone    36
3    Ozone    12
4    Ozone    18
5    Ozone    NA
6    Ozone    28

3. 核心函數(shù)

3.1 melt()函數(shù)

melt()函數(shù)主要與數(shù)據(jù)的融合有關(guān)爷辙。數(shù)據(jù)的融合是指把數(shù)據(jù)集重塑為特定的格式彬坏,使得每個(gè)觀測(cè)變量獨(dú)占一行,每行都有唯一確定每個(gè)觀測(cè)變量所需要的標(biāo)識(shí)變量膝晾,簡(jiǎn)單一句就是將寬數(shù)據(jù)變?yōu)殚L(zhǎng)數(shù)據(jù)栓始。

melt(data, id.vars, measure.vars, variable.name = “variable”, …, na.rm = FALSE, value.name = “value”, factorsAsStrings = TRUE)

data:融合的數(shù)據(jù)框
id.vars:由標(biāo)識(shí)變量構(gòu)成的向量,用于標(biāo)識(shí)觀測(cè)的變量血当,根據(jù)標(biāo)識(shí)標(biāo)量對(duì)其它變量進(jìn)行“融化”混滔,標(biāo)識(shí)變量本身不進(jìn)行“融化”。
measure.vars :由觀測(cè)變量構(gòu)成的向量歹颓,對(duì)測(cè)量變量進(jìn)行“融化”,其它變量不進(jìn)行“融化”油湖。
variable.name:用于保存原始變量名的變量的名稱(chēng)
value.name:用于保存原始值的名稱(chēng)

> data2 <- melt(airquality, id.vars = c('Month', 'Day'))
> print(data2)
    Month Day variable value
1       5   1    Ozone    41
2       5   2    Ozone    36
3       5   3    Ozone    12
4       5   4    Ozone    18
5       5   5    Ozone    NA
6       5   6    Ozone    28
7       5   7    Ozone    23
8       5   8    Ozone    19
···
242     7  28  Solar.R   213
243     7  29  Solar.R   275
244     7  30  Solar.R   253
245     7  31  Solar.R   254
246     8   1  Solar.R    83
247     8   2  Solar.R    24
248     8   3  Solar.R    77
249     8   4  Solar.R    NA
250     8   5  Solar.R    NA

在上面的例子中巍扛,函數(shù)中指定id.vars為Month和Day,因此MonthDay用于觀測(cè)乏德,并不進(jìn)行融化撤奸,其他變量進(jìn)行融化。

 data3 <- melt(iris, measure.vars = 'Species')
> data3
    Sepal.Length Sepal.Width Petal.Length Petal.Width variable      value
1            5.1         3.5          1.4         0.2  Species     setosa
2            4.9         3.0          1.4         0.2  Species     setosa
3            4.7         3.2          1.3         0.2  Species     setosa
4            4.6         3.1          1.5         0.2  Species     setosa
5            5.0         3.6          1.4         0.2  Species     setosa
6            5.4         3.9          1.7         0.4  Species     setosa
7            4.6         3.4          1.4         0.3  Species     setosa
8            5.0         3.4          1.5         0.2  Species     setosa
9            4.4         2.9          1.4         0.2  Species     setosa
10           4.9         3.1          1.5         0.1  Species     setosa
11           5.4         3.7          1.5         0.2  Species     setosa
12           4.8         3.4          1.6         0.2  Species     setosa
13           4.8         3.0          1.4         0.1  Species     setosa
14           4.3         3.0          1.1         0.1  Species     setosa

在上面的例子中喊括,measure.vars指定為“Species”胧瓜,而其他的變量就變成了id.vars,因此其他變量不變郑什,只有“Species”被融化府喳。

3.2 dcast()函數(shù)

dcast()函數(shù)用于讀取已融合的數(shù)據(jù)框(d是指data frame),并使用formula和用于整合數(shù)據(jù)的函數(shù)把數(shù)據(jù)集重塑成任意形狀:

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

data:已融合的數(shù)據(jù)框
formula:用于指定輸出的結(jié)果集格式
fun.aggregate:用于指定聚合函數(shù)蘑拯,對(duì)已聚合的數(shù)據(jù)執(zhí)行聚合運(yùn)算
margins:相當(dāng)于透視表中的行總計(jì)和列總計(jì)
subset:選取滿足一些特定值的數(shù)據(jù)钝满,相當(dāng)于Excel透視表的篩選兜粘。例如, subset =.(variable ==“l(fā)ength”)
fill:用于填充結(jié)構(gòu)缺失的值弯蚜,默認(rèn)為將fun.aggregate應(yīng)用于0長(zhǎng)度向量的值
value:value列的名稱(chēng)

formula的格式:

rowvar1 + rowvar2 + ... ~ colvar1 + colvar2 + ...

rowvar1 + rowvar2 + ...定義了要?jiǎng)澋舻淖兞考峡字幔源_定各行的內(nèi)容,而colvar1 + colvar2 + ...則定義了要?jiǎng)澋舻乃檗唷⒋_定各列內(nèi)容的變量集合路鹰。

cast意為“鑄造”,將長(zhǎng)數(shù)據(jù)轉(zhuǎn)化為寬數(shù)據(jù)收厨,作者起的函數(shù)名很形象晋柱,melt就好像把金屬融化,cast則是把融化的金屬鑄造帽氓,兩者是相對(duì)的趣斤。如果你已經(jīng)理解melt函數(shù),那么cast與之相對(duì)就可以理解黎休,那么我們就將之前融化后的data2進(jìn)行重鑄浓领。

> data2 <- melt(airquality, id.vars = c('Month', 'Day'))
> data4 <- dcast(data2, Month + Day ~ variable)
> head(data4)
  Month Day Ozone Solar.R Wind Temp
1     5   1    41     190  7.4   67
2     5   2    36     118  8.0   72
3     5   3    12     149 12.6   74
4     5   4    18     313 11.5   62
5     5   5    NA      NA 14.3   56
6     5   6    28      NA 14.9   66

可以看出重鑄后的data4與原來(lái)融化之前的data完全一樣。
請(qǐng)橫屏觀看势腮!

image

由于右側(cè)(d联贩、e和f)的公式中并未包括某個(gè)函數(shù),所以數(shù)據(jù)僅被重塑了捎拯。反之泪幌,左側(cè)的示 例(a、b和c)中指定了mean作為整合函數(shù)署照,從而就對(duì)數(shù)據(jù)同時(shí)進(jìn)行了重塑與整合祸泪。例如,(a)中 給出了每個(gè)觀測(cè)所有時(shí)刻中在X1和X2上的均值建芙;示例(b)則給出了X1和X2在時(shí)刻1和時(shí)刻2的均 值没隘,對(duì)不同的觀測(cè)進(jìn)行了平均;在(c)中則是每個(gè)觀測(cè)在時(shí)刻1和時(shí)刻2的均值禁荸,對(duì)不同的X1和X2 進(jìn)行了平均右蒲。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市赶熟,隨后出現(xiàn)的幾起案子瑰妄,更是在濱河造成了極大的恐慌,老刑警劉巖映砖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件间坐,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)眶诈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)涨醋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人逝撬,你說(shuō)我怎么就攤上這事浴骂。” “怎么了宪潮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵溯警,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我狡相,道長(zhǎng)梯轻,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任尽棕,我火速辦了婚禮喳挑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘滔悉。我一直安慰自己伊诵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布回官。 她就那樣靜靜地躺著曹宴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪歉提。 梳的紋絲不亂的頭發(fā)上笛坦,一...
    開(kāi)封第一講書(shū)人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音苔巨,去河邊找鬼版扩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛侄泽,可吹牛的內(nèi)容都是我干的资厉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蔬顾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了湘捎?” 一聲冷哼從身側(cè)響起诀豁,我...
    開(kāi)封第一講書(shū)人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎窥妇,沒(méi)想到半個(gè)月后舷胜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年烹骨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了翻伺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沮焕,死狀恐怖吨岭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情峦树,我是刑警寧澤辣辫,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站魁巩,受9級(jí)特大地震影響急灭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谷遂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一葬馋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧肾扰,春花似錦畴嘶、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至甩恼,卻和暖如春蟀瞧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背条摸。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工悦污, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钉蒲。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓切端,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親顷啼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子踏枣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 在實(shí)驗(yàn)數(shù)據(jù)產(chǎn)出之后茵瀑,繪制圖形時(shí)存在兩個(gè)問(wèn)題,首先是數(shù)據(jù)錄入格式的問(wèn)題躬厌,其次是數(shù)據(jù)轉(zhuǎn)換的問(wèn)題马昨。 (一):數(shù)據(jù)錄入[1...
    謝俊飛閱讀 910評(píng)論 0 2
  • 1.長(zhǎng)/寬數(shù)據(jù) R語(yǔ)言中,90%的情況下都是使用長(zhǎng)型數(shù)據(jù),比如構(gòu)建回歸模型鸿捧,或者利用ggplot2構(gòu)圖屹篓,因此當(dāng)遇到...
    apricoter閱讀 2,167評(píng)論 1 7
  • 我們?cè)跀?shù)據(jù)分析的過(guò)程中經(jīng)常會(huì)碰到不適合分析的數(shù)據(jù)格式,有的時(shí)候我們需要要畫(huà)圖或者建立n重交叉分析表匙奴,需要將長(zhǎng)數(shù)據(jù)透...
    鳴人吃土豆閱讀 4,238評(píng)論 1 17
  • 接上一篇筆記【r<-分析】分析之前堆巧,準(zhǔn)備數(shù)據(jù) 很多R用戶都搞不太清楚用于修整數(shù)據(jù)的內(nèi)置函數(shù)(比如stack、uns...
    王詩(shī)翔閱讀 1,976評(píng)論 0 3
  • 表情是什么饥脑,我認(rèn)為表情就是表現(xiàn)出來(lái)的情緒恳邀。表情可以傳達(dá)很多信息。高興了當(dāng)然就笑了灶轰,難過(guò)就哭了谣沸。兩者是相互影響密不可...
    Persistenc_6aea閱讀 125,060評(píng)論 2 7