melt函数简介

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来指定。
  

你可能感兴趣的:(R语言)