数据长宽格式的转换时,通常需要用到reshape2包中的函数,何为数据的长宽格式?以下为示例。

宽格式的数据每个变量都有单独的一列,例如

##      ozone      wind     temp
## 1 23.61538 11.622581 65.54839
## 2 29.44444 10.266667 79.10000
## 3 59.11538  8.941935 83.90323
## 4 59.96154  8.793548 83.96774

以下为长格式

## No id variables; using all as measure variables
##    variable     value
## 1     ozone 23.615385
## 2     ozone 29.444444
## 3     ozone 59.115385
## 4     ozone 59.961538
## 5      wind 11.622581
## 6      wind 10.266667
## 7      wind  8.941935
## 8      wind  8.793548
## 9      temp 65.548387
## 10     temp 79.100000
## 11     temp 83.903226
## 12     temp 83.967742

长格式数据的一列用于表示可能的变量类型,一列用于表示这些变量的值。 长格式数据不一定只有两列。 例如,我们可能会有一年中每一天的臭氧测量值。 在这种情况下,我们可以在一天中增加另一列。 换句话说,“长度”有不同的级别。 您想要获取数据的最终形状将取决于您在处理数据。

事实证明,某些类型的数据分析需要宽格式数据,而其他类型则需要长格式数据。例如,ggplot2需要长格式数据(技术上是整洁的数据),plyr需要长格式数据,并且大多数建模函数(例如lm(),glm()和gam())都需要长格式数据。 但是人们经常发现更容易以宽格式记录数据。

melt 函数:宽格式-长格式

names(airquality) <- tolower(names(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

使用melt函数时

aql <- melt(airquality) # [a]ir [q]uality [l]ong format
## No id variables; using all as measure variables
head(aql)
##   variable value
## 1    ozone    41
## 2    ozone    36
## 3    ozone    12
## 4    ozone    18
## 5    ozone    NA
## 6    ozone    28
tail(aql)
##     variable value
## 913      day    25
## 914      day    26
## 915      day    27
## 916      day    28
## 917      day    29
## 918      day    30

默认情况下,melt假定所有具有数字值的列都是具有值的变量。 想知道每个月和一天的臭氧,solar.r,风和温度的值时候,可以通过设置id.vars来指定变量。

aql <- melt(airquality, id.vars = c("month", "day"))
head(aql)
##   month day variable value
## 1     5   1    ozone    41
## 2     5   2    ozone    36
## 3     5   3    ozone    12
## 4     5   4    ozone    18
## 5     5   5    ozone    NA
## 6     5   6    ozone    28

设置长格式数据中的列名,可以进行如下设置:

aql <- melt(airquality, id.vars = c("month", "day"),variable.name = "climate_variable", value.name = "climate_value")
head(aql)
##   month day climate_variable climate_value
## 1     5   1            ozone            41
## 2     5   2            ozone            36
## 3     5   3            ozone            12
## 4     5   4            ozone            18
## 5     5   5            ozone            NA
## 6     5   6            ozone            28

cast functions:长格式-宽格式

aql <- melt(airquality, id.vars = c("month", "day"))
aqw <- dcast(aql, month + day ~ variable)
head(aqw)
##   month day ozone solar.r wind temp
## 1     5   1    41     190  7.4   67
## 2     5   2    36     118  8.0   72
## 3     5   3    12     149 12.6   74
## 4     5   4    18     313 11.5   62
## 5     5   5    NA      NA 14.3   56
## 6     5   6    28      NA 14.9   66
head(airquality) # original data
##   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

您可能会犯的一个令人困惑的“错误”是投射一个数据集,其中每个数据单元都有多个值。 例如,这一次我们将不包括day作为ID变量:

dcast(aql, month ~ variable)
## Aggregation function missing: defaulting to length
##   month ozone solar.r wind temp
## 1     5    31      31   31   31
## 2     6    30      30   30   30
## 3     7    31      31   31   31
## 4     8    31      31   31   31
## 5     9    30      30   30   30

When you run this in R, you’ll notice the warning message:

# Aggregation function missing: defaulting to length

每个月气候组合的单元格将填充数据行数。 我们看到的数字是每个月记录的天数。 dcast时,每个单元格有多个值时,还需要告诉dcast如何汇总数据,如采用均值,中位数或总和。 我们还将通过...参数传递选项na.rm = TRUE以删除NA值。 (...让您将其他参数传递给funn.aggregate函数,此处表示平均值。)

dcast(aql, month ~ variable, fun.aggregate = mean, na.rm = TRUE)
##   month    ozone  solar.r      wind     temp
## 1     5 23.61538 181.2963 11.622581 65.54839
## 2     6 29.44444 190.1667 10.266667 79.10000
## 3     7 59.11538 216.4839  8.941935 83.90323
## 4     8 59.96154 171.8571  8.793548 83.96774
## 5     9 31.44828 167.4333 10.180000 76.90000

reference:

https://seananderson.ca/2013/10/19/reshape/

reshape2包的基本用法(melt及cast)相关推荐

  1. 4.R语言【rehsape2包】介绍、melt( )、cast( )函数、其他使用技巧

    b站课程视频链接: https://www.bilibili.com/video/BV19x411X7C6?p=1 腾讯课堂(最新,但是要花钱,我花99

  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包里的melt()、dcast()、acast()函数学习

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

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

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

  6. R语言学习丨数据重塑、拆分与组合基础知识,merge、melt、cast函数介绍

    今天学习R语言中数据重塑相关基础知识,主要有merge.melt.cast函数用法示例.公众号:生信分析笔记 合并数据框 merge()函数能够以一列为参考合并两个不同数据框,相当于数学中的布尔运算& ...

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

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

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

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

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

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

最新文章

  1. 【ACL 2020】腾讯AI Lab解读三大前沿方向及入选的20篇论文
  2. 世卫组织总干事谭德塞:没有国家可以假装大流行已结束
  3. 【正一专栏】爱是一种信仰
  4. 患者信息SQL v1
  5. java填空题 在非静态成员方法中_Java学习(四): 类的使用
  6. BZOJ 3731: Gty的超级妹子树
  7. CentOS7下PHPNginxMysql编译安装及sytemd配置
  8. 算法组合 优化算法_算法交易简化了风险价值和投资组合优化
  9. js Iframe与父级页面通信及IE9-兼容性
  10. qtreewidget点击空白处时取消以选项_手机APP自动续费,我们要如何取消?
  11. 余承东宣布鸿蒙系统视频,余承东宣布鸿蒙系统开源:打造全球的操作系统
  12. 60道计算机网络面试题(附答案,背诵版)
  13. Arduino驱动的安装
  14. CH341A BIOS编程器 预安装成功 但无安装成功
  15. 新装linux系统没有网卡驱动的解决方法
  16. Idea导入的项目不能运行
  17. Appro DM36x IPNC 4.0 开发环境配置
  18. 基于jQuery/express/socket.io实现的匿名聊天室
  19. Java基础知识(四) 基本类型与运算
  20. 【《Real-Time Rendering 3rd》 提炼总结】(三) 第三章 · GPU渲染管线与可编程着色器 The Graphics Processing Unit

热门文章

  1. 【DFT】安装octopus
  2. 数组越界及其避免方法,C语言数组越界详解
  3. 新库上线 | CnOpenDataA股上市公司IPO申报发行文本数据
  4. Exchange绝妙使用-日历、邮件、通讯录双向同步
  5. Dev C++或者 codeblocks编译出现 [Error] ld returned 1 exit status
  6. 服务器维护的几个注意点
  7. MLSQL生态一键体验
  8. 汽车UDS诊断之通过标识符写入数据服务(0x2E)深度剖析
  9. 脉冲多普勒雷达设计附matlab代码
  10. 孪生素数【函数实现】