来源 | R友舍

前言

reshape2是又一个用来做数据处理的拓展包,用于实现宽格式数据与长格式数据之间的互转。如果你熟悉结构化数据库查询,那么你一定知道列转行与行转列,宽长数据之间互转与之类似;如果你不熟悉的也没关系,它很简单,接着往下看你就能很快熟悉并掌握了。首先我们通过一个数据集来解释什么是长宽数据。

一、宽数据与长数据

1. 宽数据

定义:每一列为一个观测变量,每一行为变量对应的观测值。

#   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

2. 长数据

定义:一列就包含了所有的变量,而另一行则是与之相关的值(长数据不一定只有两列)。

#    variable  value# 1     ozone 23.615# 2     ozone 29.444# 3      wind 11.623# 4      wind 10.267# 5      temp 65.548# 6      temp 79.100

二、reshape2包

在reshape2包中,我们用得比较多的是melt和cast两个函数。

  • melt函数:对宽数据进行处理,得到长数据;

  • cast函数:对长数据进行处理,得到宽数据。

1. melt()函数

调用公式:

> melt(data, id.vars, measure.vars,  variable.name = "variable", ...,   na.rm = FALSE, value.name = "value", factorsAsStrings = TRUE)

(1)默认情况下,melt认为所有数值列的变量均有值,此处使用R内置数据集'iris'

> data1 <- melt(iris)> head(iris)
Species     variable value1  setosa Sepal.Length   5.12  setosa Sepal.Length   4.93  setosa Sepal.Length   4.74  setosa Sepal.Length   4.65  setosa Sepal.Length   5.06  setosa Sepal.Length   5.4

(2)加入识别指标[id.vars = ],R会根据id.vars进行数据整理,即除去指标中指定的变量,其他数据都被进行了变形。此处使用R内置数据集'airquality'

数据转换目的:得到每个月(Month)以及每天(Day)的Ozone, Solar.R, Wind以及Temp的值。

> data2 <- melt(airquality,id.vars = c("Month","Day"))> head(data2)
  Month Day variable value1     5   1    Ozone    412     5   2    Ozone    363     5   3    Ozone    124     5   4    Ozone    185     5   5    Ozone    NA6     5   6    Ozone    28

(3)观测值的变量[mearsure.vars = ],变量名和数值各占一列

> data6 <- melt(iris,measure.vars = "Species")> head(data6,3)
  Sepal.Length Sepal.Width Petal.Length Petal.Width variable  value1          5.1         3.5          1.4         0.2  Species setosa2          4.9         3.0          1.4         0.2  Species setosa3          4.7         3.2          1.3         0.2  Species setosa# 指定了'Species'列为观测对象,则变量名占一列,具体值占一列

2. cast()函数

cast()函数的运用并没有melt()直观,在reshape2中有好几个cast版本的函数:

  • 对于data.frame格式的数据,需要使用dcast()函数。

  • 对于向量、矩阵或者数组格式的数据,需要使用acast()函数。

由于在平常的数据处理上,我们更多的使用格式为'dataframe'的数据,因此我们重点讲解dcast()函数的使用。

(1)dcast()调用公式:

> dcast(data, formula, fun.aggregate = NULL)

dcast借助于公式来描述数据的形状,左边参数表示"ID variables",而右边的参数表示measured variables。可能需要几次尝试,才能找到合适的公式。此处使用上文已经过melt转换后的数据集'data2'

数据转换目的:在一行上展示所有Month和Day组合下的Ozone、Solar.R、Wind和Temp值

> data3 <- dcast(data2,Month + Day ~ variable)> head(data3)
  Month Day Ozone Solar.R Wind Temp1     5   1    41     190  7.4   672     5   2    36     118  8.0   723     5   3    12     149 12.6   744     5   4    18     313 11.5   625     5   5    NA      NA 14.3   566     5   6    28      NA 14.9   66

(2)上文中,我们指定Month和Day为'ID Variables',得到重铸后的数据集,但如果只指定Month一个变量,而由于Day变量的存在,新的数据集无法展现所有的数据(Day不唯一)R会报错,为此,我们需要聚合(aggregate)这些数据,包括mean()、median()、sum()等

> data4 <- dcast(data2,Month ~ variable,fun.aggregate = mean,na.rm=TRUE)
# 分别得到各月各个特征的均值> data4  Month    Ozone  Solar.R      Wind     Temp1     5 23.61538 181.2963 11.622581 65.548392     6 29.44444 190.1667 10.266667 79.100003     7 59.11538 216.4839  8.941935 83.903234     8 59.96154 171.8571  8.793548 83.967745     9 31.44828 167.4333 10.180000 76.90000

(3)fun函数也可以自行编写(自编函数)

# 查看缺失值>  find_null <- function(x){   return(sum(is.na(x)))}> data5 <- dcast(data2,Month~variable,find_null)

附学习文档:

  1. An Introduction to reshape2

  2. Data Manipulation with reshape2

  3. 探索R包reshape2:揉数据的最佳伴侣

  4. How to reshape data in R: tidyr vs reshape2

  5. Reshape and aggregate data with the R package reshape2

  • 人民日报终发文:国航“避重就轻、不作为、护犊子、体验差、听不进批评”

  • 华为延期,三星下架,讲讲折叠屏为什么这么难

  • 遇事不决赖毛子,美国这次打算封杀变脸APP

【数据处理】reshape2包相关推荐

  1. R语言reshape2包-官方文档学习

    R语言reshape2包-官方文档学习 简介 核心函数 长数据与宽数据 宽数据 长数据 melt函数 meltarray meltdataframe meltdefault meltlist cast ...

  2. R语言使用reshape2包的melt函数将dataframe从宽表到长表(Wide- to long-format)、指定行标识符变量、并自定义生成的长表的标识符列的名称

    R语言使用reshape2包的melt函数将dataframe从宽表到长表(Wide- to long-format).指定行标识符变量.并自定义生成的长表的标识符列的名称 目录

  3. R语言使用reshape2包的melt函数将dataframe从宽表到长表(Wide- to long-format)、如果没有指定行标识符号,则所有的字段都会放入variable变量中

    R语言使用reshape2包的melt函数将dataframe从宽表到长表(Wide- to long-format).如果没有指定行标识符号,则所有的字段都会放入variable变量中 目录

  4. R语言使用reshape2包的dcast函数将dataframe从长表到宽表(Long- to wide-format)、指定单个标识符、、表格转化的时候值不唯一设置聚合函数(均值)

    R语言使用reshape2包的dcast函数将dataframe从长表到宽表(Long- to wide-format).指定单个标识符..表格转化的时候值不唯一设置聚合函数(均值) 目录

  5. R语言将dataframe宽表转化为长表实战:使用data.table、使用tidyr包gather函数、使用reshape2包

    R语言将dataframe宽表转化为长表实战:使用data.table.使用tidyr包gather函数.使用reshape2包 目录

  6. R语言学习笔记:使用reshape2包实现整合与重构

    R语言中提供了许多用来整合和重塑数据的强大方法. 整合 aggregate 重塑 reshape 在整合数据时,往往将多组观测值替换为根据这些观测计算的描述统计量. 在重塑数据时,则会通过修改数据的结 ...

  7. reshape2包的基本用法(melt及cast)

    数据长宽格式的转换时,通常需要用到reshape2包中的函数,何为数据的长宽格式?以下为示例. 宽格式的数据每个变量都有单独的一列,例如 ## ozone wind temp ## 1 23.6153 ...

  8. R语言:reshape2包里的melt()、dcast()、acast()函数学习

    reshape2 有时候合并两个数据集的时候,直接使用cbind.rbind的方式不能区分哪些数据分别来自哪个数据集,所以这时候可以使用merge函数 merge(x,y,by=c("列1& ...

  9. R count函数_R最快且比dplyr最高效的大数据处理R包:tidyfst

    R最快且比dplyr最高效的大数据处理R包:tidyfst​mp.weixin.qq.com 写在前面 本包开发者黄天元: 首先我对tidyfst进行了一套完整的学习,因为这里面的函数并不多,满打满计 ...

  10. R最快且比dplyr最高效的大数据处理R包:tidyfst

    写在前面 本包开发者黄天元: 首先我对tidyfst进行了一套完整的学习,因为这里面的函数并不多,满打满计算,也就38个. 随着扩增子的平稳,我逐渐转入宏基因组,软件更多,平台跨度更大,R语言显示出来 ...

最新文章

  1. Codeforces Round #406 (Div. 1) B. Legacy(线段树上优化建图)
  2. python自学教程推荐-学习python中的pandas有没有好的教程推荐?
  3. linux命令使用示例:查看某目录属于哪个分区
  4. Windows 7关闭和开启系统休眠
  5. 这个韩国女星在节目里吃了“巨型蛤蜊” 可能要坐牢5年了...
  6. 软件体系结构六大质量属性-浅析淘宝网
  7. 神奇宝贝HTML游戏代码,方舟生存进化神奇宝贝代码资料大全
  8. 卅三先生的工程电磁场讲座.EEm05——边界条件001
  9. 【转载】js 对表格进行各种操作(转)
  10. [飘渺女声]罗琳娜 麦肯尼(Loreena McKennitt)
  11. GPU求解粘性不可压流体
  12. rap开发与rcp开发_使用RAP将RCP应用程序转换为Web应用程序
  13. 美团2020后台校招题目--美团骑手包裹区间分组
  14. DATA GUARD代码(部分)
  15. 2021年四川高考成绩及录取结果查询,2021年四川高考录取结果查询时间及查询入口,录取结果多少号公布...
  16. 升级Win11后Win安全中心丢失或者点击没反应的解决方法
  17. python math ceil_python中math.ceil什么意思
  18. Web网站模板-响应式企业产品介绍模板(HTML+CSS+JavaScript)
  19. 《SEO教程:搜索引擎优化入门与进阶(第3版)》
  20. 【论文笔记】Retro-Reader:基于回溯式阅读器的机器阅读理解模型

热门文章

  1. 解决问题--Maven,IDEA项目External Libraries下只有jdk没有maven依赖
  2. IDEA配置JSTL与简单使用
  3. 强大,腾讯开源前后端接口开发工具!
  4. 大过年的,程序员在家改bug…
  5. 阿里规定超过三张表禁止join,这是为什么?
  6. REST和微服务——用异步交互分解单体系统
  7. 10个最佳的网站和App开发工具
  8. 致运维——运维军团告诉你如何走过七年之痒
  9. 送书!60 本签名书!
  10. squid代理与缓存(下)