不多说,直接上干货!

  很多地方都需用到这个知识点,比如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来处理数据表的长宽转换(图文详解)的更多相关文章

  1. 如何用Python来处理数据表的长宽转换(图文详解)

    不多说,直接上干货! 很多地方都需用到这个知识点,比如Tableau里.   通常可以采取如python 和 r来作为数据处理的前期. Tableau学习系列之Tableau如何通过数据透视表方式读取 ...

  2. Ubuntu16.04下沙盒数据导入到 Neo4j 数据库(图文详解)

    不多说,直接上干货! 参考博客 http://blog.csdn.net/u012318074/article/details/72793914   (表示感谢)  前期博客 Neo4j沙盒实验申请过 ...

  3. Ubuntu14.04下沙盒数据导入到 Neo4j 数据库(图文详解)

    不多说,直接上干货! 参考博客 http://blog.csdn.net/u012318074/article/details/72793914   (表示感谢) 前期博客 Neo4j沙盒实验申请过程 ...

  4. SPSS学习系列之SPSS Statistics导入读取数据(多种格式)(图文详解)

    不多说,直接上干货! SPSS Statistics导入读取数据的步骤: 文件  ->  导入数据 成功! 欢迎大家,加入我的微信公众号:大数据躺过的坑     免费给分享       同时,大 ...

  5. SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)

    SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)-DML 1.SQL INSERT INTO 语句(在表中插入) INSERT INTO 语句用于向表中插入新记录. SQL I ...

  6. Python的Django框架中forms表单类的使用方法详解

    用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...

  7. 大数据学习系列之五 ----- Hive整合HBase图文详解

    引言 在上一篇 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机) 和之前的大数据学习系列之二 ----- HBase环境搭建(单机) 中成功搭建了Hive和HBase的环 ...

  8. 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解

    引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...

  9. 多表连接的三种方式详解 hash join、merge join、 nested loop

    在多表联合查询的时候,如果我们查看它的执行计划,就会发现里面有多表之间的连接方式.多表之间的连接有三种方式:Nested Loops,Hash Join 和 Sort Merge Join.具体适用哪 ...

随机推荐

  1. Web结构组件

    一.Web结构组件 1.代理 位于客户端和服务器之间的HTTP实体,接收客户端的所有HTTP请求,并将这些请求转发给HTTP服务器. 2.缓存 HTTP的仓库,使常用的页面的副本可以保存在离客户端更近 ...

  2. Leetcode-448. Find All Numbers Disappeared in an Array(solve without extra space easy)

    Given an array of integers where 1 ≤ a[i] ≤ n (n= size of array), some elements appear twice and oth ...

  3. MapReduce编程解析

    MapReduce编程模型之案例 wordcount 输入数据 atguigu atguiguss sscls clsjiaobanzhangxuehadoop 输出数据 atguigu 2banzh ...

  4. Scala_继承

    继承 Scala与Java在继承方面的区别 Scala中的继承与Java有着显著的不同: 重写一个非抽象方法必须使用override修饰符 只有主构造器可以调用超类的主构造器 在子类中重写超类的抽象方 ...

  5. NameNode工作机制

    NameNode工作机制

  6. toast js

    参考别人的,自己改写了下,很好用. <!DOCTYPE html> <html lang="zh-CN"> <head> <meta ch ...

  7. 多条件情况查询,sql select case when when else

    多条件情况查询 SELECT      Title,     'Price Range' =     CASE         WHEN price IS NULL THEN 'Unpriced'   ...

  8. 自动化构建工具gradle安装教程(使用sdkman安装)

    gradle是什么?(wiki解释) Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具.它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的 ...

  9. 撸.NET Core的正确姿势

    特点 案例基于刚发布的.NET Core 2.1 只需一台Linux服务器搞定一切, 全程无需自己配置dotnet环境, 需要熟悉git docker基础知识可有可无, 过了下面几个步骤,你就已经入门 ...

  10. idea创建第一个maven web项目

    一.打开idea,File->New->Project.选择Mavne,勾选Create from archtype,选择org.apache.maven.archtypes:maven- ...