R语言 数据整理(reshape2)

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处理)
posted @ 2018-04-01 09:58  jr13  阅读(470)  评论(0编辑  收藏  举报