美文网首页R语言学习笔记
《R语言实战》学习笔记---Chapter5(10) 高级数据管

《R语言实战》学习笔记---Chapter5(10) 高级数据管

作者: RSP小白之路 | 来源:发表于2023-08-26 08:59 被阅读0次

    数据重构简单实践

    reshape2包

    reshape2 包是一套重构和整合数据集的绝妙的万能工具,这里只按照本书做简单用法学习。它的深入功能要使用一个包,先要安装:

    if(!require(reshape2)) install.packages("reshape2")
    

    数据融合

    数据融合(melt)使每一行都是唯一的标识符-变量组合。
    使用书中的例子进行说明吧:

    rm(list = ls())
    ID <- c(1,1,2,2)
    Time <- c(1,2,1,2)
    X1 <- c(5,3,6,2)
    X2 <- c(6,5,1,4)
    mydt <- data.frame(ID, Time,X1,X2 )
    > print(mydt)
      ID Time X1 X2
    1  1    1  5  6
    2  1    2  3  5
    3  2    1  6  1
    4  2    2  2  4
    

    这个数据框中,标识变量为ID和Time,观测值数据变量为X1和X2,现在要做的是,使标识变量为ID和Time能够唯一地确定一个观测值,X1和X2则作为一个新衍生的变量的观测值成为一列,它们的观测值为值变量作为一列。

    > if(!require(reshape2)) install.packages("reshape2")
    载入需要的程辑包:reshape2
    
    载入程辑包:‘reshape2’
    
    The following object is masked from ‘package:tidyr’:
    
        smiths
    
    > melt(mydt, id.vars = c("ID" , "Time"))
      ID Time variable value
    1  1    1       X1     5
    2  1    2       X1     3
    3  2    1       X1     6
    4  2    2       X1     2
    5  1    1       X2     6
    6  1    2       X2     5
    7  2    1       X2     1
    8  2    2       X2     4
    

    注意, 必须指定要唯一确定每个测量所需的变量(ID和Time),而表示测量变量名的变量(X1或X2) 将由程序为你自动创建。

    数据重铸

    融合后的数据, 现在就可以使用dcast() 函数将它重铸为任意形状了。数据重铸 (cast) 为你想要的任何形状。 在重铸过程中, 你可以使用任何函数对数据进行整合。

    dcast() 函数读取已融合的数据, 并使用你提供的公式和一个(可选的) 用于整合数据的函数将其重塑。

    调用格式为:

    newdata <- dcast(md, formula, fun.aggregate)
    

    其中的 md 为已融合的数据, formula 描述了想要的最后结果, 而
    fun.aggregate 是(可选的) 数据整合函数。其接受的公式形如:

    rowvar1 + rowvar2 + ... ~ colvar1 + colvar2 + ...
    

    [图片上传失败...(image-91e2e-1691908043678)]书中有一个图片总结的很好,可是不知道为何最近简书无法上传图片。

    那我只能把图片列举的每种结果都运行一次了,我们一一来试过:

    mt <- melt(mydt, id.vars = c("ID" , "Time"))   
    mt # 运行melt函数后融合数据集
    
      ID Time variable value
    1  1    1       X1     5
    2  1    2       X1     3
    3  2    1       X1     6
    4  2    2       X1     2
    5  1    1       X2     6
    6  1    2       X2     5
    7  2    1       X2     1
    8  2    2       X2     4
    

    不执行整合

    • dcast(mt, ID + Time~variable)
     ID Time X1 X2
    1  1    1  5  6
    2  1    2  3  5
    3  2    1  6  1
    4  2    2  2  4
    
    • dcast(mt, ID + variable~Time)
      ID variable 1 2
    1  1       X1 5 3
    2  1       X2 6 5
    3  2       X1 6 2
    4  2       X2 1 4
    

    执行整合

    • dcast(mt, ID~variable, mean)
      ID X1  X2
    1  1  4 5.5
    2  2  4 2.5
    
    • dcast(mt, Time~variable, mean)
      Time  X1  X2
    1    1 5.5 3.5
    2    2 2.5 4.5
    
    • dcast(mt, ID~Time, mean)
      ID   1 2
    1  1 5.5 4
    2  2 3.5 3
    

    如你所见, 函数melt() 和dcast() 提供了令人惊叹的灵活性。

    相关文章

      网友评论

        本文标题:《R语言实战》学习笔记---Chapter5(10) 高级数据管

        本文链接:https://www.haomeiwen.com/subject/dfpxmdtx.html