如何用R来处理数据表的长宽转换(图文详解)
不多说,直接上干货!
很多地方都需用到这个知识点,比如Tableau里。 通常可以采取如python 和 r来作为数据处理的前期。
Tableau学习系列之Tableau如何通过数据透视表方式读取数据文件(图文详解)
如何用Python来处理数据表的长宽转换(图文详解)
数据长宽转换是很常用的需求,特别是当是从Excel中导入的汇总表时,常常需要转换成一维表(长数据)才能提供给图表函数或者模型使用。
在R语言中,提供数据长宽转换的包主要有两个:
- reshape2::melt/dcast
- tidyr::gather/spread
library("reshape2")
library("tidyr")
mydata<-data.frame(
Name = c("苹果","谷歌","脸书","亚马逊","腾讯"),
Conpany = c("Apple","Google","Facebook","Amozon","Tencent"),
Sale2013 = c(,,,,),
Sale2014 = c(,,,,),
Sale2015 = c(,,,,),
Sale2016 = c(,,,,)
)

数据重塑(宽转长):
melt函数是reshape2包中的数据宽转长的函数
mydata<-melt(
mydata, #待转换的数据集名称
id.vars=c("Conpany","Name"), #要保留的主字段
variable.name="Year", #转换后的分类字段名称(维度)
value.name="Sale" #转换后的度量值名称
)

转换之后,长数据结构保留了原始宽数据中的Name、Conpany字段,同时将剩余的年度指标进行堆栈,转换为一个代表年度的类别维度和对应年度的指标。(即转换后,所有年度字段被降维化了)。
1、在tidyr包中的gather也可以非常快捷的完成宽转长的任务:
data1<-gather(
data=mydata, #待转换的数据集名称
key="Year", #转换后的分类字段名称(维度)
value="Sale" , #转换后的度量值名称
Sale2013:Sale2016 #选择将要被拉长的字段组合
) #(可以使用x:y的格式选择连续列,也可以以-z的格式排除主字段)

而相对于数据宽转长而言,数据长转宽就显得不是很常用,因为长转宽是数据透视,这种透视过程可以通过汇总函数或者类数据透视表函数来完成。
但是既然数据长宽转换是成对的需求,自然有对应的长转宽函数。
2、reshape2中的dcast函数可以完成数据长转宽的需求:
dcast(
data=data1, #数据集名称
Name+Conpany~Year #x1+x2+……~class
#这一项是一个转换表达式,表达式左侧列
#出要保留的主字段(即不会被扩宽的字段,右侧则是要分割的分类变量,扩展之后的
#宽数据会增加若干列度量值,列数等于表达式右侧分类变量的类别个数
)

除此之外,tidyr包中的spread函数在解决数据长转宽方面也是很好的一个选择。
spread:
spread(
data=data1, #带转换长数据框名称
key=Year, #带扩宽的类别变量(编程新增列名称)
value=Sale) #带扩宽的度量值 (编程新增列度量值)

从以上代码的复杂度来看,reshape2内的两个函数melt\dcast和tidyr内的两个函数gather\spread相比,gather\spread这一对函数完胜,不愧是哈神的最新力作,tidyr内的两个函数所需参数少,逻辑上更好理解,自始至终都围绕着data,key、value三个参数来进行设定,而相对老旧的包reshape2内的melt\dcast函数在参数配置上就显得不是很友好,他是围绕着一直不变的主字段来进行设定的,tidyr包则围绕着转换过程中会变形的维度和度量来设定的。
同时,大家可以关注我的个人博客:
http://www.cnblogs.com/zlslch/ 和 http://www.cnblogs.com/lchzls/ http://www.cnblogs.com/sunnyDream/
详情请见:http://www.cnblogs.com/zlslch/p/7473861.html
人生苦短,我愿分享。本公众号将秉持活到老学到老学习无休止的交流分享开源精神,汇聚于互联网和个人学习工作的精华干货知识,一切来于互联网,反馈回互联网。
目前研究领域:大数据、机器学习、深度学习、人工智能、数据挖掘、数据分析。 语言涉及:Java、Scala、Python、Shell、Linux等 。同时还涉及平常所使用的手机、电脑和互联网上的使用技巧、问题和实用软件。 只要你一直关注和呆在群里,每天必须有收获
对应本平台的讨论和答疑QQ群:大数据和人工智能躺过的坑(总群)(161156071)






如何用R来处理数据表的长宽转换(图文详解)的更多相关文章
- 如何用Python来处理数据表的长宽转换(图文详解)
不多说,直接上干货! 很多地方都需用到这个知识点,比如Tableau里. 通常可以采取如python 和 r来作为数据处理的前期. Tableau学习系列之Tableau如何通过数据透视表方式读取 ...
- Ubuntu16.04下沙盒数据导入到 Neo4j 数据库(图文详解)
不多说,直接上干货! 参考博客 http://blog.csdn.net/u012318074/article/details/72793914 (表示感谢) 前期博客 Neo4j沙盒实验申请过 ...
- Ubuntu14.04下沙盒数据导入到 Neo4j 数据库(图文详解)
不多说,直接上干货! 参考博客 http://blog.csdn.net/u012318074/article/details/72793914 (表示感谢) 前期博客 Neo4j沙盒实验申请过程 ...
- SPSS学习系列之SPSS Statistics导入读取数据(多种格式)(图文详解)
不多说,直接上干货! SPSS Statistics导入读取数据的步骤: 文件 -> 导入数据 成功! 欢迎大家,加入我的微信公众号:大数据躺过的坑 免费给分享 同时,大 ...
- SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)
SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)-DML 1.SQL INSERT INTO 语句(在表中插入) INSERT INTO 语句用于向表中插入新记录. SQL I ...
- Python的Django框架中forms表单类的使用方法详解
用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...
- 大数据学习系列之五 ----- Hive整合HBase图文详解
引言 在上一篇 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机) 和之前的大数据学习系列之二 ----- HBase环境搭建(单机) 中成功搭建了Hive和HBase的环 ...
- 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解
引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...
- 多表连接的三种方式详解 hash join、merge join、 nested loop
在多表联合查询的时候,如果我们查看它的执行计划,就会发现里面有多表之间的连接方式.多表之间的连接有三种方式:Nested Loops,Hash Join 和 Sort Merge Join.具体适用哪 ...
随机推荐
- Silverlight样式定义
方法一.定义在控件内部 <Canvas Background="Red" Height="100" HorizontalAlignment="L ...
- day3用户交互,格式化输出,数据类型,流程控制
上节课复习: 1.运行python程序的三步骤:python test.py 1.先启动python解释器 2.将test.py的内容当作普通的字符读入内存 3.python解释器解释执行刚刚读入内存 ...
- chrome用type=file获取图片路径并转base64字符串
1 html页面 <div class="col-sm-2" style="height: 200px;margin-top: 14px;"> &l ...
- _ZSkill_快捷键_Xcode快捷键
Xcode 快捷键使用 Command 用来导航,控制导航区域 Alt 控制右边的部分. 如Assistant Editor ,utility editor. Control 编辑区域上的jump b ...
- tlink平台数据转发 c# 控制台程序
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...
- 20155326《Java程序设计》实验一实验报告
实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版) ...
- activity之间如何传递list
可以把list的内容拼成json串再去解析
- codeforces 879c
C. Short Program time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- 使用PinYin4j.jar将汉字转换为拼音
package com.Test.util; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j ...
- sed,grep,进阶+source+export+环境变量
三剑客之sed 概括流程:从文件或管道中,可迭代读取. 命令格式: sed(软件) 选项 sed命令 输入文件 增 两个sed命令: a: 追加文本到指定行后 i: 插入到指定行前 sed -i '1 ...