reshape2
宽数据:
# ozone wind temp
# 1 23.62 11.623 65.55
# 2 29.44 10.267 79.10
# 3 59.12 8.942 83.90
# 4 59.96 8.794 83.97
长数据:
# variable value
# 1 ozone 23.615
# 2 ozone 29.444
# 3 ozone 59.115
# 4 ozone 59.962
# 5 wind 11.623
# 6 wind 10.267
# 7 wind 8.942
# 8 wind 8.794
# 9 temp 65.548
# 10 temp 79.100
# 11 temp 83.903
# 12 temp 83.968
-
- melt:函数对宽数据进行处理,得到长数据
melt可以对各数据类型进行处理,如:
## S3 method for class 'array'
melt(data, varnames = names(dimnames(data)), ...,
na.rm = FALSE, as.is = FALSE, value.name = "value")
## S3 method for class 'data.frame'
melt(data, id.vars, measure.vars,
variable.name = "variable", ..., na.rm = FALSE, value.name= "value",
factorsAsStrings = TRUE)
以数据框为例:
melt(data, id.vars = c("month", "day"),
variable.name = "climate_variable",
value.name = "climate_value")
其中:id.vars 为变量id,variable.name为变换变量列名,value.name为变换变量值。
假设数据框data有以下变量:month、day、x1、x2、x3、x4,以上malt将进行以下变形:
分别对除id.vars("month", "day")外的变量x1~x4进行统计,统计值的列名为value.name,统计变量名(x1~x4)的列名为variable.name
即:
对x1~x4分别进行id.vars变换得到以下形式:
month day climate_variable climate_value
1月 1日 x1 value1
1月 2日 x1 value2
...
...
1月 1日 x4 value100
1月 2日 x4 value101 - cast:函数对长数据进行处理,得到宽数据
在reshape2中有好几个cast版本的函数。若你经常使用data.frame,就需要使用dcast函数。acast函数返回向量、矩阵或者数组。
dcast(data, formula, fun.aggregate = NULL, ..., margins = NULL,
subset = NULL, fill = NULL, drop = TRUE,
value.var = guess_value(data))
acast(data, formula, fun.aggregate = NULL, ..., margins = NULL,
subset = NULL, fill = NULL, drop = TRUE,
value.var = guess_value(data))
其中,data为长数据集,formula为分类变量名(melt的variable.name),fun.aggregate为聚合函数
dcast(md, ID+variable~Time,mean)表示使用Time对(ID+variable)进行分组,生成Time拥有分类数的列数,
其值使用函数mean处理(即对 ID+variable+Time进行group by,对结果进行mean处理)
- melt:函数对宽数据进行处理,得到长数据