数据清洗比用函数:gather()与spread()

在R中,数据是以data frame的形式存在,每一行是一个observation,每一列则是一个variable,如果行和列放错了位置就变成需要清洗的脏数据了,spread() 和 gather() 就是帮我们把行和列归位的。

上个例子:

data <- data.frame(
  time = as.Date('2018-10-12') + 0:9,
  X = rnorm(10, 0, 1),
  Y = rnorm(10, 0, 2),
  Z = rnorm(10, 0, 4)
)

data长这样:

time          X          Y          Z
1  2018-10-12  0.3845284 -0.9836826 -1.0569133
2  2018-10-13 -1.3013479 -0.7696469 -0.2760410
3  2018-10-14  0.1635476  1.1942040 -1.2547790
4  2018-10-15  1.2628161  2.5839376  6.6017756
5  2018-10-16  1.4551718 -5.6564205  2.9474487
6  2018-10-17  0.1393586  1.1265156 -4.4762960
7  2018-10-18 -0.2038476 -2.3953796  0.3373139
8  2018-10-19  0.6941938  0.3539203  0.2740444
9  2018-10-20 -0.6756837 -0.5591505  4.0882947
10 2018-10-21  0.4185659  0.6060037 -5.8530951

先来看看gather的()用法。gather()是用来把错放在列的数据回归到行里的:

library(tidyr)
data2 <- gather(data, category, value, X, Y, Z)

category是表头的东西放进行里之后叫的名字,value是原有的数据叫的名字,X,Y,Z则是我们想转换的列。

time category        value
1  2018-10-12        X  1.673028459
2  2018-10-13        X -1.364111807
3  2018-10-14        X -0.014500001
4  2018-10-15        X -2.183752736
5  2018-10-16        X -0.436903127
6  2018-10-17        X -0.556745963
7  2018-10-18        X  0.290214951
8  2018-10-19        X -0.704078406
9  2018-10-20        X -0.223482208
10 2018-10-21        X -0.170426277
11 2018-10-12        Y  1.361510858
12 2018-10-13        Y  0.956045956
13 2018-10-14        Y  2.599511931
14 2018-10-15        Y -4.183381629
15 2018-10-16        Y  0.519890823
16 2018-10-17        Y  2.620015778
17 2018-10-18        Y -1.288184298
18 2018-10-19        Y -0.090887780
19 2018-10-20        Y  1.396205902
20 2018-10-21        Y -0.979669215
21 2018-10-12        Z  3.420684975
22 2018-10-13        Z -3.929318661
23 2018-10-14        Z -1.479456924
24 2018-10-15        Z  2.977001374
25 2018-10-16        Z  0.007312678
26 2018-10-17        Z  0.122019491
27

在gather的时候,有时我们想把所有的行都变过来,或者列数太多了,没办法一一specify,可以省略X,Y,Z。 直接用"-"来指示想要忽略哪些列,比如下面的语句和之前的gather是一样的效果:

gather(data, category, value, -time)
(0)

相关推荐

  • 成功解决TypeError: data type ‘category‘ not understood

    成功解决TypeError: data type 'category' not understood 解决问题 TypeError: data type 'category' not understo ...

  • R语言简单for循环

    欢迎来到医科研,这里是白介素2的读书笔记,跟我一起聊临床与科研的故事, 生物医学数据挖掘,R语言,TCGA.GEO数据挖掘. 简单for循环  创建一个简单数据框 1Sys.setlocale('LC ...

  • R语言 | 数据操作tidyr包

    [更新~]Python网络爬虫与文本数据分析 tidyr包 类似于上图成行成列的表数据是干净数据(tidy data),一般每一行表示一条观测记录,每一列表示一个字段(变量)tidyr包是用来操作ti ...

  • tidyr总结篇

    欢迎来到医科研,这里是白介素2的读书笔记,跟我一起聊临床与科研的故事, 生物医学数据挖掘,R语言,TCGA.GEO数据挖掘. tidyr总结篇  gather(data,key="" ...

  • 周末统计问题(16): 定量数据的变异程度如何测量?

    统计问题(16):定量数据的变异程度如何测量? *请大家在看问题答案解析之前,先"投票",也看看大家的结果 Question Which, if any, of the follo ...

  • 数据探索+美图绘制+组合图形

    翻译:xph 如何对一维数据进行可视化? 1 基本柱状图 geom_histogram:为频率分布直方图,专门用于绘制一列数据的分布,即使是一列数据我们可以看到也是数据框格式的. # 加载需要包 li ...

  • 消息推送和短信发送的实现方案

    本文主要是将目前的消息模块做一个总结,分为短信发送.APP的消息推送两个部分.短信发送采用的是第三方的API(阿里大于短信平台),APP的消息推送采用的是极光的消息推送平台.只是介绍一个大概的流程,细 ...

  • 这20个Pandas函数,堪称'数据清洗'杀手!

    今天准备介绍一篇超级肝货! Pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的.它提供了大量能使我们快速便捷地处理数据的函数和方法. 本文介绍的这20个[被分成了15组]函 ...

  • 初中数学反比例函数闯关难题,建议收藏!

    i初中数学 公众号 初中数学反比例函数闯关难题 i初中数学 爱 · 初中数学,是一个由数学名师团发起的公众号,旨在为初中生提供数学同步知识学习,同步习题训练,期中期末知识要点总结,期中期末模拟试卷测评 ...

  • 函数考点全突破(十三)二次函数问题中四边形面积最值问题

    春熙初中数学 25篇原创内容 公众号 初中数学解题思路 本号致力于初中数学学习的钻研和探索.全面覆盖初中数学典型题集.解题模型.动点最值.思路方法.超级易错.几何辅助线.压轴破解等方面,欢迎关注! 1 ...

  • 函数考点全突破(十四)二次函数中特殊平行四边形的存在性问题

    春熙初中数学 25篇原创内容 公众号 初中数学解题思路 本号致力于初中数学学习的钻研和探索.全面覆盖初中数学典型题集.解题模型.动点最值.思路方法.超级易错.几何辅助线.压轴破解等方面,欢迎关注! 1 ...

  • 秒杀导数压轴题:之同构式下的函数体系#数...

    秒杀导数压轴题:之同构式下的函数体系#数...

  • 高中数学——30道三角 函数为载体的导数...

    高中数学--30道三角 函数为载体的导数压轴题汇编 1.与三角函数有关的零点问题 2.与三角函数有关的不等式问题 3.与三角函数有关的恒成立问题 4.与三角函数有关的双变量,比值换元问题

  • 吃透这23道函数与导数典型例题,稳了!

    函数与导数是整个高中阶段数学的基石,这一部分内容熟练掌握,高中三年每次考试轻松多得20分不在话下.

  • Excel统计排名函数RANK

    点击下方 ↓ 关注,每天免费看Excel专业教程 置顶公众号或设为星标 ↑ 才能每天及时收到推送 个人微信号 | (ID:LiRuiExcel520) 微信服务号 | 跟李锐学Excel(ID:LiR ...

  • 2.6 多条件“或”函数or的用法

    多条件"或"函数or的用法