美文网首页R绘图
R语言reshape2包处理数据2021.3.6

R语言reshape2包处理数据2021.3.6

作者: R语言_茶味先生 | 来源:发表于2021-03-06 11:33 被阅读0次

    1. merge函数合并数据

    merge函数通过by选择合并某列的相同值。

    x<-data.frame(k1=c(NA,NA,3,4,5),k2=c(1,NA,NA,4,5),data=1:5)
    y<-data.frame(k1=c(NA,2,NA,4,5),k2=c(NA,NA,3,4,5),data=1:5)
    merge(x,y,by="k1")#第一种,按照k1列合并
    #merge(x,y,by=c("k1","k2"))#第二种,按照k1列,k2列合并
    #merge(x,y,by="k1",incomparables =NA)#第三种,按照k1列合并而且将包含NA的行都去掉
    

    2. reshape2包合并数据

    这个包处理数据与excel包中的透视表有些类似

    2.1 安装并载入reshape2包

    install.packages("reshape2")
    library(reshape2)
    

    2.1 使用reshape2包

    reshape包包含融合(melt)和重铸(cast),melt函数是将宽数据变为长数据,而cast则是将长数据变为宽数据。

    2.1.1 melt函数

    melt函数就是将很宽的表融合成一列,变成很长的表,之后设定id.var=month和day就是固定搜索宽表中带有月日的列。这里我们使用airquality内置数据集作为示例。

    airquality#载入数据集
    names(airquality)<-tolower(names(airquality))将列名变为小写,更方便输入
    aql<-melt(airquality)#数据融合
    head(aql)#查看融合后数据
    
    图1 融合后的截取的前六行数据

    因为初始数据集有六列数据。


    图2 初始数据集有六列

    但是melt函数只将前四列进行了数据融合,我这里猜测是无论什么数据集,他默认会将后两列作为ID,并且我们不用id.vars指明就不会显示。所以我们需要指明melt函数前四列作为变量值,后两列month和day作为ID。

    aql<-melt(airquality,id.vars=c("month","day"))#指明id
    

    图3和图1可以对照参考


    图3 指定id融合后的数据

    2.1.2 cast函数

    cast函数分为dcast函数和acast函数,dcast函数用于重铸数据框,而acast函数用于重铸向量,矩阵或者数组。
    指定重铸格式

    aqw<-dcast(aql,month+day~variable)#按照公式进行计算
    

    这里按月份指定重铸,不知道应该对每月的数据进行何种处理则会报错。所以我们通过fun.aggregate参数指定计算函数,na.rm=T则用来计算时去除缺失值

    aqw<-dcast(aql,month~variable,fun.aggregate=mean,na.rm=T)#指定函数,重铸数据
    #aqw<-dcast(aql,month~variable,fun.aggregate=sum,na.rm=T)
    

    相关文章

      网友评论

        本文标题:R语言reshape2包处理数据2021.3.6

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