reshape2包:重构、整合数据集工具

reshape2包的主要功能函数为melt、cast,实现了长数据和宽数据之间的转换,可以理解为Excel中的逆透视和透视。

1、宽数据VS长数据

宽数据是我们最常见的数据集格式,数据集的每一列为一个观测变量,每一行为一组所有观测变量的观测值。

长数据有两个特殊的列:variable、valuevariable列用于存放观测变量,value列用于存放观测变量对应的观测值。因为长数据将观测变量所有的值分开,所以列比较长,即叫长数据。

library(reshape2)
ID <- c(1,1,2,2)
Time <- c(1,2,1,2)
X1 <- c(5,3,6,2)
X2 <-c(6,5,1,4)
mydata <- data.frame(ID,Time,X1,X2)
mydata #构造数据,宽数据,常见的数据集格式
data(package = "reshape2") #查看包中自带数据集
md <- melt(mydata,id.vars = c("ID","Time"),measure.vars = c("X1","X2"))
md #长数据

2、melt函数

melt系列函数具体可分为melt.data.frame、melt.array、melt.list,但是这里只将对数据框的融合。格式为:melt(data, id.vars, measure.vars, variable.name = "variable", ..., na.rm = FALSE, value.name = "value", factorsAsStrings = TRUE)

  • id.vars可以指定一系列变量,作为标记变量;
  • measure.vars若留空,则生成的数据会保留data所有列,然后增加两个新列:variable和value,一个存储变量的名称一个存储变量值,当然measure.vars也可以一系列变量,表示观测变量。若两者都未指定,则把因子和字符串类型的变量作为id.vars,其余变量作为measure.vars;
  • variable.name用于指定观测变量的列名;
  • na.rm用于去除缺失值;
  • value.name用于指定观测变量名;
head(airquality)
data1 <- melt(airquality) #默认将因子和字符串类型
head(data1)
data2 <- melt(airquality,
              id.vars = c("Month","Day"))#将month\day作为标记变量,其余为观测变量
data3 <- melt(airquality,id.vars = c("Month","Day"),
              measure.vars = "Wind") #指定观测变量

3、cast函数

cast系列函数包含dcast、acast,分别返回为数据框和数组、向量、矩阵数据类型。格式为:dcast(data, formula, fun.aggregate = NULL, ..., margins = NULL, subset = NULL, fill = NULL, drop = TRUE, value.var = guess_value(data))

  • data代表已融合的数据框;
  • formula:用于指定输出的结果集格式,用“~”连接,左边为标识变量,右边为测量变量,类似于melt函数中的id.vars参数和measure.vars参数;
  • fun.aggregate:用于指定聚合函数,对已聚合的数据执行聚合运算,如mean, sum, median;
  • margins:相当于透视表中的行总计和列总计;
  • subset:选取满足一些特定值的数据,相当于Excel透视表的筛选;
  • fill用于填充缺失值的值;
  • drop:默认为TRUE,是否删除缺失的组合。
data5 <- melt(airquality, id.vars = c('Month', 'Day'))
data6 <- dcast(data5, Month + Day ~ variable) #使用“融化”指定的相同的标识变量 
data6
data7 <- dcast(data5, Day ~ variable+Month) #表示变量为Day
data7
library(reshape2)
ID <- c(1,1,2,2)
Time <- c(1,2,1,2)
X1 <- c(5,3,6,2)
X2 <-c(6,5,1,4)
mydata <- data.frame(ID,Time,X1,X2)
mydata #构造数据,宽数据,常见的数据集格式
md <- melt(mydata,id.vars = c("ID","Time"))
md
#融合数据
dcast(md,ID~variable) #包含变量数量
dcast(md,ID~variable,mean)  #求均值
dcast(md,ID~variable,sum)  #求和
dcast(md,Time~variable,mean)  #求均值
dcast(md,Time~variable,sum)  #求和
dcast(md,ID~Time,mean)
dcast(md,ID+Time~variable)
dcast(md,ID+variable~Time)
dcast(md,ID~variable + Time)

注:本文只写出了reshape2包最常用的两个函数,其中还有其他函数,详细请查看帮助文档。
help(package = "reshape2")