R语言reshape2包-官方文档学习
简介
reshape2包是由Hadley Wickham开发的用于数据重构的包,其主要功能函数为melt、cast,实现了长数据和宽数据之间的转换,包中还包含其它函数和数据集
使用得当,reshape2包是数据处理的利器
核心函数
长数据与宽数据
在学习如何使用核心函数melt和cast之前,我们先来了解下什么是长数据和宽数据
一般我们收集到的数据集会呈现为宽数据格式,这里以R自带的数据集airquality为例,介绍长数据和宽数据
宽数据:
> head(airquality)
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
5 NA NA 14.3 56 5 5
6 28 NA 14.9 66 5 6
宽数据是我们常见的数据集格式,因为这种格式符合数据收集的习惯和标准,数据集的每一列为一个观测变量,每一行为一组所有观测变量的观测值
个人理解:宽数据格式看重的是一次观测的各个变量相对应的观测值,所以各个变量是重点,而变量数目一般会比观测数多,这样就显得数据集较宽,故称为宽数据
长数据:
> data1 <- melt(airquality)
No id variables; using all as measure variables
> head(data1)
variable value
1 Ozone 41
2 Ozone 36
3 Ozone 12
4 Ozone 18
5 Ozone NA
6 Ozone 28
以上是运用melt函数得到的长数据,melt用法在下文详述,让我们先来观察下长数据的形式
长数据有两个特殊的列:variable和value,variable列用于存放观测变量,value列用于存放观测变量对应的观测值
个人理解:长数据格式用其特有的variable列和value列将观测结果细分,这在我们对单个变量进行分析而不是对所有变量进行分析时会简便得多,因其将每一个观测变量的观测值分开存储,造成variable列和value列较长,以致整个数据集显得较长,故称为长数据
melt函数
Convert an object into a molten data frame.
返回一个数据框
对不同的数据对象,melt函数有不同的使用方法:
- 针对数组的melt.array
- 针对数据框的melt.data.frame
- 针对向量的melt.default
- 针对列表的melt.list**
个人理解:melt意为“融化”,将宽数据转化为长数据,宽数据是一次观测记录了所有观测变量的观测值,melt的作用就是根据观测变量“融化”这些观测值,将观测值分开
melt.array
Melt an array.
其实可以处理的对象包括array、table和matrix
用法:
melt(data, varnames = names(dimnames(data)), …, na.rm = FALSE, as.is = FALSE, value.name = “value”)
参数:
- varnames:用于指定“融化”后形成的数据框的变量名
- na.rm:默认为FALSE,用于移除缺失值
- as.is:默认为FALSE,为FALSE时,函数会调用type.convert方法将维度名称转化,为TRUE时,维度名称仍会作为字符串类型
示例:
> a <- array(c(1:23, NA), c(2,3,4))
> melt(a, varnames = c('X', 'Y', 'Z'))
X Y Z value
1 1 1 1 1
2 2 1 1 2
3 1 2 1 3
4 2 2 1 4
5 1 3 1 5
6 2 3 1 6
7 1 1 2 7
8 2 1 2 8
9 1 2 2 9
10 2 2 2 10
11 1 3 2 11
12 2 3 2 12
13 1 1 3 13
14 2 1 3 14
15 1 2 3 15
16 2 2 3 16
17 1 3 3 17
18 2 3 3 18
19 1 1 4 19
20 2 1 4 20
21 1 2 4 21
22 2 2 4 22
23 1 3 4 23
24 2 3 4 NA
melt.data.frame
Melt a data frame into form suitable for easy casting.
我们主要使用的melt方法即这种处理数据框的方法
用法:
melt(data, id.vars, measure.vars, variable.name = “variable”, …, na.rm = FALSE, value.name = “value”, factorsAsStrings = TRUE)
参数:
- id.vars:用于指定标识变量,根据标识标量对其它变量进行“融化”,标识变量本身不进行“融化”
- measure.vars:用于指定测量变量,对测量变量进行“融化”,其它变量不进行“融化”
- 若只指定了id.vars和measure.vars中的一项,则把指定之外的变量作为另一项
- 若两者都未指定,则把因子和字符串类型的变量作为id.vars,其余变量作为measure.vars
示例:
> data2 <- melt(airquality)
No id variables; using all as measure variables
> head(data2)
variable value
1 Ozone 41
2 Ozone 36
3 Ozone 12
4 Ozone 18
5 Ozone NA
6 Ozone 28
# 指定Month和Day为标识变量
> data3 <- melt(airquality, id.vars = c('Month', 'Day'))
> head(data3)
Month Day variable value
1 5 1 Ozon