• R:reshape2包中的melt


    melt()函数
    melt为熔化、溶解的意思,此处可理解为扔进去一个东西,出来另外一个本质一样但形状不一样的东西。
    语法结构:melt(data, ..., na.rm = FALSE, value.name = "value")

    其中:data可以是数据框、数组或列表,melt()函数会根据数据类型选择 melt.data.frame, melt.array 或 melt.list 函数进行实际操作。

    (1)数据类型为data.frame时:扔进去的是data.frame,出来的仍是data.frame,但形状不一样了

    > (d<-data.frame(
    area=c(1,1,2,3,3,1),
    PH=c(2.3,2.9,4.0,7.9,8.0,3.2),
    temp=c(23,21,19,10,13,19),
    p=c(0.99,0.95,0.85,0.34,0.25,0.90))
    )
     area PH temp p
    1 1 2.3 23 0.99
    2 1 2.9 21 0.95
    3 2 4.0 19 0.85
    4 3 7.9 10 0.34
    5 3 8.0 13 0.25
    6 1 3.2 19 0.90
    > melt(d,id.var="area") #以area为列变量对数据框d进行重新排列
         area variable value
    1 1 PH 2.30
    2 1 PH 2.90
    3 2 PH 4.00
    4 3 PH 7.90
    5 3 PH 8.00
    6 1 PH 3.20
    7 1 temp 23.00
    8 1 temp 21.00
    9 2 temp 19.00
    10 3 temp 10.00
    11 3 temp 13.00
    12 1 temp 19.00
    13 1 p 0.99
    14 1 p 0.95
    15 2 p 0.85
    16 3 p 0.34
    17 3 p 0.25
    18 1 p 0.90

    #当area为id.vars时,其他变量(measure.vars)均在variable列,value对应该variable的值

    > melt(d,measure.vars="area") #此时area为度量变量,value列将显示其变量值
        PH temp p variable value
    1 2.3 23 0.99 area 1
    2 2.9 21 0.95 area 1
    3 4.0 19 0.85 area 2
    4 7.9 10 0.34 area 3
    5 8.0 13 0.25 area 3
    6 3.2 19 0.90 area 1

    #当area为measure.vars时,其他变量均是id.vars,故id.vars和measure.vars两参数根据便利性任选其一即可

    (2)数据类型为list时:扔进去是list,出来的是data.frame

    >( l<-list(a=c("John","Lucy","Peter","Shane"),b=c(80,76,90,88),c=c("M","F","M","M")))
    $a
    [1] "John" "Lucy" "Peter" "Shane"

    $b
    [1] 80 76 90 88

    $c
    [1] "M" "F" "M" "M" #列表l包含三个成分,成分名分别为a、b、c

    > melt(l,id.vars="a")
        value L1
    1 John a
    2 Lucy a
    3 Peter a
    4 Shane a
    5 80 b
    6 76 b
    7 90 b
    8 88 b
    9 M c
    10 F c
    11 M c
    12 M c
     #出来的data.frame包含两列,列表的成分名为一列,列名为L1;各成分值为一列,列名为value。如果list中有list类型的成分,则melt转化为三列,L1为list名,L2为list下的成分名,value为各成分值

    (3)数据类型为array:复制下“DM小菜鸟”的解释

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

    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

  • 相关阅读:
    Oracle notes
    jQuery笔记
    sql developer 要求enter the full pathname for java.exe
    [Error] WCF: SOAP security negotiation
    Unity
    Windows Form 开发笔记
    WP开发 资料整理
    乔迁新居:http://longwarelive.spaces.live.com/
    2008年1月1日启用 longware@live.cn
    《程序员》杂志揭晓2007软件中国年度评选
  • 原文地址:https://www.cnblogs.com/nkwy2012/p/7613874.html
Copyright © 2020-2023  润新知