reshape2介紹

本文是對(duì)[Sean C. Anderson ][1] 所介紹的reshape2進(jìn)行的整理迈套。

1. 序言

寬數(shù)據(jù)

#   ozone   wind  temp
# 1 23.62 11.623 65.55
# 2 29.44 10.267 79.10
# 3 59.12  8.942 83.90
# 4 59.96  8.794 83.97

長(zhǎng)數(shù)據(jù)

#    variable  value
# 1     ozone 23.615
# 2     ozone 29.444
# 3     ozone 59.115
# 4     ozone 59.962
# 5      wind 11.623
# 6      wind 10.267
# 7      wind  8.942
# 8      wind  8.794
# 9      temp 65.548
# 10     temp 79.100
# 11     temp 83.903
# 12     temp 83.968

長(zhǎng)數(shù)據(jù)有一列數(shù)據(jù)是變量的類(lèi)型,有一列是變量的值资溃。長(zhǎng)數(shù)據(jù)不一定只有兩列大莫。ggplot2需要長(zhǎng)類(lèi)型的數(shù)據(jù),plyr也需要長(zhǎng)類(lèi)型的數(shù)據(jù)拓瞪,大多數(shù)的模型(比如lm(), glm()以及gam())也需要長(zhǎng)數(shù)據(jù)缴罗。

2. reshape2 包

reshape2 用得比較多的是meltcast兩個(gè)函數(shù)。

  • melt函數(shù)對(duì)寬數(shù)據(jù)進(jìn)行處理祭埂,得到長(zhǎng)數(shù)據(jù)面氓;
  • cast函數(shù)對(duì)長(zhǎng)數(shù)據(jù)進(jìn)行處理,得到寬數(shù)據(jù)蛆橡;

2.1 melt函數(shù)

此處用R內(nèi)置的airquality數(shù)據(jù)集舌界,首先將列名改成小寫(xiě),然后查看相應(yīng)的數(shù)據(jù)

names(airquality) <- tolower(names(airquality))
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

先看看直接用metl函數(shù)處理上述的數(shù)據(jù)泰演,會(huì)有什么結(jié)果呻拌。

aql <- melt(airquality) # [a]ir [q]uality [l]ong format
head(aql)
  variable value
1    ozone    41
2    ozone    36
3    ozone    12
4    ozone    18
5    ozone    NA
6    ozone    28

然后再看看末尾的幾個(gè)數(shù)據(jù)

tail(aql)
    variable value
913      day    25
914      day    26
915      day    27
916      day    28
917      day    29
918      day    30

默認(rèn)情況下,melt認(rèn)為所有數(shù)值列的變量均有值睦焕。很多情況下柏锄,這都是我們想要的情況酿箭。在這里,我們想知道每個(gè)月(month)以及每天(day)的ozone, solar.r, wind以及temp的值趾娃。因此缭嫡,我們需要告訴meltmonthday"ID variables"抬闷。ID variables就是那些能夠區(qū)分不同行數(shù)據(jù)的變量妇蛀,個(gè)人感覺(jué)類(lèi)似于數(shù)據(jù)庫(kù)中的主鍵。

aql <- melt(airquality, id.vars = c("month", "day"))
head(aql)
  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

如果我們想修改長(zhǎng)數(shù)據(jù)中的列名笤成,該如何操作呢?

aql <- melt(airquality, id.vars = c("month", "day"),
  variable.name = "climate_variable", 
  value.name = "climate_value")
head(aql)
  month day climate_variable climate_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

2.2 cast函數(shù)

從寬格式數(shù)據(jù)變換到長(zhǎng)格式的數(shù)據(jù)比較直觀评架,然后反過(guò)來(lái)則需要一些二外的功夫。

在reshape2中有好幾個(gè)cast版本的函數(shù)炕泳。若你經(jīng)常使用data.frame纵诞,就需要使用dcast函數(shù)。acast函數(shù)返回向量培遵、矩陣或者數(shù)組浙芙。

dcast借助于公式來(lái)描述數(shù)據(jù)的形狀,左邊參數(shù)表示"ID variables"籽腕,而右邊的參數(shù)表示measured variables嗡呼。可能需要幾次嘗試皇耗,才能找到合適的公式南窗。

這里,我們需要告知dcast郎楼,monthday是ID variables万伤,variable則表示measured variables。

aql <- melt(airquality, id.vars = c("month", "day"))
aqw <- dcast(aql, month + day ~ variable)
head(aqw)
  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
head(airquality) # original data
  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

除了需要調(diào)整下列變量的順序呜袁,我們已經(jīng)恢復(fù)出原始數(shù)據(jù)敌买。下圖將有助解釋所發(fā)生的情況。

![here is the dcast illustration][2]

藍(lán)色陰影塊是能夠表示每一行數(shù)據(jù)的ID variables傅寡;紅色陰影塊包含了將待生成數(shù)據(jù)的列名放妈;而灰色的數(shù)據(jù)表示用于填充相關(guān)區(qū)域的數(shù)據(jù)北救。

令人產(chǎn)生疑惑的情況往往是荐操,一個(gè)數(shù)據(jù)單元有一個(gè)以上的數(shù)據(jù)。比如珍策,我們的ID variables不包含day托启,

dcast(aql, month ~ variable)
  month ozone solar.r wind temp
1     5    31      31   31   31
2     6    30      30   30   30
3     7    31      31   31   31
4     8    31      31   31   31
5     9    30      30   30   30

同時(shí)還有以下的警告信息

 Aggregation function missing: defaulting to length

再次查看dcast的輸出數(shù)據(jù),可以看到每個(gè)單元是monthclimate組合的個(gè)數(shù)攘宙。所得到數(shù)據(jù)是month對(duì)應(yīng)的day的記錄數(shù)屯耸。當(dāng)每個(gè)單元有多個(gè)數(shù)據(jù)是拐迁,需要告訴dcast如何聚合(aggregate)這些數(shù)據(jù),比如取均值(mean)疗绣,計(jì)算中位數(shù)(median)线召,或者簡(jiǎn)單的求和(sum)。比如多矮,在這里缓淹,我們簡(jiǎn)單的計(jì)算下均值,同時(shí)通過(guò)na.rm = TRUE刪除NA值塔逃。

dcast(aql, month ~ variable, fun.aggregate = mean, na.rm = TRUE)
  month    ozone  solar.r      wind     temp
1     5 23.61538 181.2963 11.622581 65.54839
2     6 29.44444 190.1667 10.266667 79.10000
3     7 59.11538 216.4839  8.941935 83.90323
4     8 59.96154 171.8571  8.793548 83.96774
5     9 31.44828 167.4333 10.180000 76.90000```




### 3. 參考文獻(xiàn)

本文源于[Sean C. Anderson][1]的文檔讯壶,具體的可以查看  
<http://seananderson.ca/2013/10/19/reshape.html>



[1]: http://seananderson.ca/2013/10/19/reshape.html
[2]: http://upload-images.jianshu.io/upload_images/58036-d3cdd2487970a0a5.png  "what is this "

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市湾盗,隨后出現(xiàn)的幾起案子伏蚊,更是在濱河造成了極大的恐慌,老刑警劉巖格粪,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件躏吊,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡匀借,警方通過(guò)查閱死者的電腦和手機(jī)颜阐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)吓肋,“玉大人凳怨,你說(shuō)我怎么就攤上這事∈枪恚” “怎么了肤舞?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)均蜜。 經(jīng)常有香客問(wèn)我李剖,道長(zhǎng),這世上最難降的妖魔是什么囤耳? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任篙顺,我火速辦了婚禮,結(jié)果婚禮上充择,老公的妹妹穿的比我還像新娘德玫。我一直安慰自己,他們只是感情好椎麦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布宰僧。 她就那樣靜靜地躺著,像睡著了一般观挎。 火紅的嫁衣襯著肌膚如雪琴儿。 梳的紋絲不亂的頭發(fā)上段化,一...
    開(kāi)封第一講書(shū)人閱讀 51,624評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音造成,去河邊找鬼显熏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛晒屎,可吹牛的內(nèi)容都是我干的佃延。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼夷磕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼履肃!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起坐桩,我...
    開(kāi)封第一講書(shū)人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤尺棋,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后绵跷,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體膘螟,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年碾局,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了荆残。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡净当,死狀恐怖内斯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情像啼,我是刑警寧澤俘闯,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站忽冻,受9級(jí)特大地震影響真朗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜僧诚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一遮婶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧湖笨,春花似錦旗扑、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)脊串。三九已至辫呻,卻和暖如春清钥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背放闺。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工祟昭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人怖侦。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓篡悟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親匾寝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子搬葬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

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

  • Reshaping Data Reshape & reshape 2 經(jīng)常用到的一中分析是reshape - ca...
    慢思考快思考閱讀 303評(píng)論 0 0
  • 語(yǔ) 句 功 能 數(shù)據(jù)操作 SELECT——從數(shù)據(jù)庫(kù)表中檢索數(shù)據(jù)行和列INSERT——向數(shù)據(jù)庫(kù)表添加新數(shù)據(jù)行DELE...
    戰(zhàn)敭閱讀 5,093評(píng)論 0 53
  • 2017/3/14 RDBMS:關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng) 關(guān)系模型獨(dú)立于語(yǔ)言 SQL有幾種不同類(lèi)型的語(yǔ)言:數(shù)據(jù)定義語(yǔ)言...
    ancherl閱讀 1,625評(píng)論 0 6
  • 所以做了這個(gè)簡(jiǎn)單的決定。
    五月成長(zhǎng)筆記閱讀 285評(píng)論 0 1
  • 到達(dá)大阪的當(dāng)晚艳悔,飯后急凰,散步一般把周?chē)D(zhuǎn)了轉(zhuǎn),有喜歡的猜年,就仔細(xì)看看抡锈。另外兩個(gè)整天,一天去了Universial St...
    木紫草閱讀 259評(píng)論 0 0