【数据处理】reshape2包
来源 | 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)
附学习文档:
An Introduction to reshape2
Data Manipulation with reshape2
探索R包reshape2:揉数据的最佳伴侣
How to reshape data in R: tidyr vs reshape2
Reshape and aggregate data with the R package reshape2
人民日报终发文:国航“避重就轻、不作为、护犊子、体验差、听不进批评”
华为延期,三星下架,讲讲折叠屏为什么这么难
遇事不决赖毛子,美国这次打算封杀变脸APP
【数据处理】reshape2包相关推荐
- R语言reshape2包-官方文档学习
R语言reshape2包-官方文档学习 简介 核心函数 长数据与宽数据 宽数据 长数据 melt函数 meltarray meltdataframe meltdefault meltlist cast ...
- R语言使用reshape2包的melt函数将dataframe从宽表到长表(Wide- to long-format)、指定行标识符变量、并自定义生成的长表的标识符列的名称
R语言使用reshape2包的melt函数将dataframe从宽表到长表(Wide- to long-format).指定行标识符变量.并自定义生成的长表的标识符列的名称 目录
- R语言使用reshape2包的melt函数将dataframe从宽表到长表(Wide- to long-format)、如果没有指定行标识符号,则所有的字段都会放入variable变量中
R语言使用reshape2包的melt函数将dataframe从宽表到长表(Wide- to long-format).如果没有指定行标识符号,则所有的字段都会放入variable变量中 目录
- R语言使用reshape2包的dcast函数将dataframe从长表到宽表(Long- to wide-format)、指定单个标识符、、表格转化的时候值不唯一设置聚合函数(均值)
R语言使用reshape2包的dcast函数将dataframe从长表到宽表(Long- to wide-format).指定单个标识符..表格转化的时候值不唯一设置聚合函数(均值) 目录
- R语言将dataframe宽表转化为长表实战:使用data.table、使用tidyr包gather函数、使用reshape2包
R语言将dataframe宽表转化为长表实战:使用data.table.使用tidyr包gather函数.使用reshape2包 目录
- R语言学习笔记:使用reshape2包实现整合与重构
R语言中提供了许多用来整合和重塑数据的强大方法. 整合 aggregate 重塑 reshape 在整合数据时,往往将多组观测值替换为根据这些观测计算的描述统计量. 在重塑数据时,则会通过修改数据的结 ...
- reshape2包的基本用法(melt及cast)
数据长宽格式的转换时,通常需要用到reshape2包中的函数,何为数据的长宽格式?以下为示例. 宽格式的数据每个变量都有单独的一列,例如 ## ozone wind temp ## 1 23.6153 ...
- R语言:reshape2包里的melt()、dcast()、acast()函数学习
reshape2 有时候合并两个数据集的时候,直接使用cbind.rbind的方式不能区分哪些数据分别来自哪个数据集,所以这时候可以使用merge函数 merge(x,y,by=c("列1& ...
- R count函数_R最快且比dplyr最高效的大数据处理R包:tidyfst
R最快且比dplyr最高效的大数据处理R包:tidyfstmp.weixin.qq.com 写在前面 本包开发者黄天元: 首先我对tidyfst进行了一套完整的学习,因为这里面的函数并不多,满打满计 ...
- R最快且比dplyr最高效的大数据处理R包:tidyfst
写在前面 本包开发者黄天元: 首先我对tidyfst进行了一套完整的学习,因为这里面的函数并不多,满打满计算,也就38个. 随着扩增子的平稳,我逐渐转入宏基因组,软件更多,平台跨度更大,R语言显示出来 ...
最新文章
- Codeforces Round #406 (Div. 1) B. Legacy(线段树上优化建图)
- python自学教程推荐-学习python中的pandas有没有好的教程推荐?
- linux命令使用示例:查看某目录属于哪个分区
- Windows 7关闭和开启系统休眠
- 这个韩国女星在节目里吃了“巨型蛤蜊” 可能要坐牢5年了...
- 软件体系结构六大质量属性-浅析淘宝网
- 神奇宝贝HTML游戏代码,方舟生存进化神奇宝贝代码资料大全
- 卅三先生的工程电磁场讲座.EEm05——边界条件001
- 【转载】js 对表格进行各种操作(转)
- [飘渺女声]罗琳娜 麦肯尼(Loreena McKennitt)
- GPU求解粘性不可压流体
- rap开发与rcp开发_使用RAP将RCP应用程序转换为Web应用程序
- 美团2020后台校招题目--美团骑手包裹区间分组
- DATA GUARD代码(部分)
- 2021年四川高考成绩及录取结果查询,2021年四川高考录取结果查询时间及查询入口,录取结果多少号公布...
- 升级Win11后Win安全中心丢失或者点击没反应的解决方法
- python math ceil_python中math.ceil什么意思
- Web网站模板-响应式企业产品介绍模板(HTML+CSS+JavaScript)
- 《SEO教程:搜索引擎优化入门与进阶(第3版)》
- 【论文笔记】Retro-Reader:基于回溯式阅读器的机器阅读理解模型