全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
31093 7
2014-07-01
请问reshape2包中melt()函数的作用是什么?看帮助文档没看懂!

melt {reshape2}        R Documentation
Convert an object into a molten data frame.

Description

This the generic melt function. See the following functions for the details about different data structures:

Usage

melt(data, ..., na.rm = FALSE, value.name = "value")
Arguments

data       
Data set to melt

na.rm       
Should NA values be removed from the data set? This will convert explicit missings to implicit missings.

...       
further arguments passed to or from other methods.

value.name       
name of variable used to store values

Details

melt.data.frame for data.frames

melt.array for arrays, matrices and tables

melt.list for lists

See Also

cast


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2014-12-6 23:45:49
melt 是溶解/分解的意思, 即拆分数据。
reshape/reshape2 的 melt 函数是个 S3 通用函数,它会根据数据类型(数据框,数组或列表)选择 melt.data.frame, melt.array 或 melt.list 函数进行实际操作。


1. 如果是数组(array)类型,melt 的用法就很简单,它依次对各维度的名称进行组合将 数据进行线性/向量化。如果数组有 n 维,那么得到的结果共有 n+1 列,前 n 列记录数组的 位置信息,最后一列才是观测值。


> datax <- array(1:8, dim=c(2,2,2))
> melt(datax)
    Var1 Var2 Var3 value
        1    1    1    1     1
        2    2    1    1     2
        3    1    2    1     3
        4    2    2    1     4
        5    1    1    2     5
        6    2    1    2     6
        7    1    2    2     7
        8    2    2    2     8


> melt(datax, varnames=LETTERS[24:26],value.name="Val")
           X Y Z Val
        1 1 1 1   1
        2 2 1 1   2
        3 1 2 1   3
        4 2 2 1   4
        5 1 1 2   5
        6 2 1 2   6
        7 1 2 2   7
        8 2 2 2   8
   
2. 如果是列表数据,melt 函数将列表中的数据拉成两列,一列记录列表元素的值,另一列记录列表元素的名称;如果列表中的元素是列表,则增加列变量存储元素名称。元素值排列在前,名称在后,越是顶级的列表元素名称越靠后:


> datax <- list(agi="AT1G10000", GO=c("GO:1010","GO:2020"), KEGG=c("0100", "0200", "0300"))


> melt(datax)


                    value   L1
        1 AT1G10000  agi
        2   GO:1010   GO
        3   GO:2020   GO
        4      0100 KEGG
        5      0200 KEGG
        6      0300 KEGG


> melt(list(at_0100=datax))
              value   L2      L1
        1 AT1G10000  agi at_0100
        2   GO:1010   GO at_0100
        3   GO:2020   GO at_0100
        4      0100 KEGG at_0100
        5      0200 KEGG at_0100
        6      0300 KEGG at_0100
   
3. 如果数据是数据框类型,melt的参数就稍微复杂些:
  
> melt(data, id.vars, measure.vars,
variable.name = "variable", ..., na.rm = FALSE,
value.name = "value")
   
其中 id.vars 是被当做维度的列变量,每个变量在结果中占一列;measure.vars 是被当成观测值的列变量,它们的列变量名称和值分别组成 variable 和 value两列,列变量名称用variable.name 和 value.name来指定。
   
艾玛终于写完了,觉得自己好磨叽......

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-12-8 09:41:29
DM小菜鸟 发表于 2014-12-6 23:45
melt 是溶解/分解的意思, 即拆分数据。
reshape/reshape2 的 melt 函数是个 S3 通用函数,它会根据数据类 ...
非常谢谢你的耐心讲解!谢谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-1-23 10:11:54
我想问一下,melt的源代码怎么获得啊我自己写了一个,但是同样的数据量,自己的代码跑了2小时,melt嗖的一下。。。心里太不平衡了,想学习一下~~~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-1-23 14:31:45
提示: 作者被禁止或删除 内容自动屏蔽
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-7-28 14:05:03
DM小菜鸟 发表于 2014-12-6 23:45
melt 是溶解/分解的意思, 即拆分数据。
reshape/reshape2 的 melt 函数是个 S3 通用函数,它会根据数据类 ...
怎样只给指定的列用melt
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群