reshape2包的主要功能函数为melt、cast
,实现了长数据和宽数据之间的转换,可以理解为Excel中的逆透视和透视。
宽数据是我们最常见的数据集格式,数据集的每一列为一个观测变量,每一行为一组所有观测变量的观测值。
长数据有两个特殊的列:variable、value
,variable
列用于存放观测变量,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 #长数据
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)
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") #指定观测变量
cast系列函数包含dcast、acast
,分别返回为数据框和数组、向量、矩阵数据类型。格式为:dcast(data, formula, fun.aggregate = NULL, ..., margins = NULL, subset = NULL, fill = NULL, drop = TRUE, value.var = guess_value(data))
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")