R语言中dcast 和 melt的使用

1. 图片说明


2. 例子

示例数据:

set.seed(123)dat = data.frame(ID = paste0("ID_",1:10),y1 = rnorm(10),y2=rnorm(10),y3=rnorm(10),y4 = rnorm(10))dat

结果

> dat      ID          y1         y2         y3          y41   ID_1 -0.56047565  1.2240818 -1.0678237  0.426464222   ID_2 -0.23017749  0.3598138 -0.2179749 -0.295071483   ID_3  1.55870831  0.4007715 -1.0260044  0.895125664   ID_4  0.07050839  0.1106827 -0.7288912  0.878133495   ID_5  0.12928774 -0.5558411 -0.6250393  0.821581086   ID_6  1.71506499  1.7869131 -1.6866933  0.688640257   ID_7  0.46091621  0.4978505  0.8377870  0.553917658   ID_8 -1.26506123 -1.9666172  0.1533731 -0.061911719   ID_9 -0.68685285  0.7013559 -1.1381369 -0.3059626610 ID_10 -0.44566197 -0.4727914  1.2538149 -0.38047100

3. 变为三列:ID,trait,y:melt

代码

re1 = melt(data = dat,id.vars=c("ID"),variable.name="Loc",value.name="y")head(re1)

结果预览

> head(re1)    ID Loc           y1 ID_1  y1 -0.560475652 ID_2  y1 -0.230177493 ID_3  y1  1.558708314 ID_4  y1  0.070508395 ID_5  y1  0.129287746 ID_6  y1  1.71506499

4. 三列变为去:dcast

代码

dcast(data=re1,ID ~Loc)

结果

> dcast(data=re1,ID ~Loc)Using 'y' as value column. Use 'value.var' to override      ID          y1         y2         y3          y41   ID_1 -0.56047565  1.2240818 -1.0678237  0.426464222  ID_10 -0.44566197 -0.4727914  1.2538149 -0.380471003   ID_2 -0.23017749  0.3598138 -0.2179749 -0.295071484   ID_3  1.55870831  0.4007715 -1.0260044  0.895125665   ID_4  0.07050839  0.1106827 -0.7288912  0.878133496   ID_5  0.12928774 -0.5558411 -0.6250393  0.821581087   ID_6  1.71506499  1.7869131 -1.6866933  0.688640258   ID_7  0.46091621  0.4978505  0.8377870  0.553917659   ID_8 -1.26506123 -1.9666172  0.1533731 -0.0619117110  ID_9 -0.68685285  0.7013559 -1.1381369 -0.30596266

5.命令解析

  • melt是融合的意思,将宽的数据,变为长的数据。比如在田间数据中,ID,Loc,rep1, rep2, re3,这里的rep1,rep2,rep3是重复1,2,3的值,需要将数据变为:ID,Loc,Rep,y四列的数据。这样就可以用melt命令
    melt(dat,c("ID","Loc"))
    > ex1 = data.frame(Cul = rep(1:10,2),Loc=rep(1:2,each=10),rep1=rnorm(20),rep2=rnorm(20),rep3=rnorm(20))> head(ex1)Cul Loc        rep1       rep2       rep31   1   1 -0.71040656  0.1176466  0.70178432   2   1  0.25688371 -0.9474746 -0.26219753   3   1 -0.24669188 -0.4905574 -1.57214424   4   1 -0.34754260 -0.2560922 -1.51466775   5   1 -0.95161857  1.8438620 -1.60153626   6   1 -0.04502772 -0.6519499 -0.5309065
    > ex1_re = melt(ex1,c("Cul","Loc"))> head(ex1_re)Cul Loc variable       value1   1   1     rep1 -0.710406562   2   1     rep1  0.256883713   3   1     rep1 -0.246691884   4   1     rep1 -0.347542605   5   1     rep1 -0.951618576   6   1     rep1 -0.04502772
  • dcast是昌数据,变宽数据,因此ex1_re如果想要变回去,用dcast(ex1_re, Cul + Loc ~ variable), ~号左边是保持不变的列名,~右边是需要扩展的列名, 省略的value是需要填充的数据。
    > dcast(ex1_re,Cul+Loc~variable) Cul Loc        rep1        rep2       rep31    1   1 -0.71040656  0.11764660  0.70178432    1   2 -0.57534696  1.44455086  0.78773883    2   1  0.25688371 -0.94747461 -0.26219754    2   2  0.60796432  0.45150405  0.76904225    3   1 -0.24669188 -0.49055744 -1.57214426    3   2 -1.61788271  0.04123292  0.33220267    4   1 -0.34754260 -0.25609219 -1.51466778    4   2 -0.05556197 -0.42249683 -1.00837669    5   1 -0.95161857  1.84386201 -1.601536210   5   2  0.51940720 -2.05324722 -0.119452611   6   1 -0.04502772 -0.65194990 -0.530906512   6   2  0.30115336  1.13133721 -0.280395313   7   1 -0.78490447  0.23538657 -1.461755614   7   2  0.10567619 -1.46064007  0.562989515   8   1 -1.66794194  0.07796085  0.687916816   8   2 -0.64070601  0.73994751 -0.372438817   9   1 -0.38022652 -0.96185663  2.100108918   9   2 -0.84970435  1.90910357  0.976973419  10   1  0.91899661 -0.07130809 -1.2870305

    关注我

    ID:R-breeding
    公众号:育种数据分析之放飞自我
  • ©著作权归作者所有,转载或内容合作请联系作者
    • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
      沈念sama阅读 213,047评论 6 492
    • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
      沈念sama阅读 90,807评论 3 386
    • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
      开封第一讲书人阅读 158,501评论 0 348
    • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
      开封第一讲书人阅读 56,839评论 1 285
    • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
      茶点故事阅读 65,951评论 6 386
    • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
      开封第一讲书人阅读 50,117评论 1 291
    • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
      沈念sama阅读 39,188评论 3 412
    • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
      开封第一讲书人阅读 37,929评论 0 268
    • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
      沈念sama阅读 44,372评论 1 303
    • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
      茶点故事阅读 36,679评论 2 327
    • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
      茶点故事阅读 38,837评论 1 341
    • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
      沈念sama阅读 34,536评论 4 335
    • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
      茶点故事阅读 40,168评论 3 317
    • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
      开封第一讲书人阅读 30,886评论 0 21
    • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
      开封第一讲书人阅读 32,129评论 1 267
    • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
      沈念sama阅读 46,665评论 2 362
    • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
      茶点故事阅读 43,739评论 2 351

    推荐阅读更多精彩内容

    • "use strict";function _classCallCheck(e,t){if(!(e instanc...
      久些阅读 2,028评论 0 2
    • From shirinsplayground,非常好的机器学习的文章,保存下来,慢慢学习。 https://shi...
      iColors阅读 1,193评论 0 0
    • 前言 学习数据挖掘已经有一段时间了,相关的文章和书也看了一些,感觉学习这个的关键还是离不开其中形形色色的算法。作为...
      谦啸阅读 5,468评论 2 21
    • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
      不排版阅读 4,380评论 0 5
    • 水韵秋色·菊揽芳华”第六届湖熟菊花展盛大开幕,400亩菊花海正式开门迎客,踏秋赏菊,一揽芳华,这也将成为南京最亮眼...
      无忧无虑61阅读 351评论 0 0