为了账号安全,请及时绑定邮箱和手机立即绑定

R for data Science(七)

标签:
Java

Tidy data

  • 每个变量必须有自己的列

  • 每个观察必须有自己的行

  • 每个值必须有自己的单元格


    webp

    image

这意味着对于大多数真正的分析,你需要做一些整理。第一步总是找出变量和观测值。有时这很简单;其他时候,您需要与最初生成数据的人员进行协商。第二步是解决两个常见问题之一:
一个变量可能跨多个列分布。
一个观察可能分散在多行中。
通常,数据集只会遇到这些问题之一;只有当你真的不走运时,它才会同时遭受这两种痛苦!要解决这些问题,您需要tidyr中的两个最重要的函数:gather()和spread()。

gather()和spread()

gather函数字如其意,就是代表数据的融合,聚合,下面这张图就很好展示出其含义

webp

image

这个表就是将原始表格的时间列融合成两个新变量,year和cases,建立一种一一对应关系。
代码:
 library(tidyverse)
table4a %>%
   gather(`1999`, `2000`, key = "year", value = "cases")

webp

image

这个函数两个重要的点:第一 key这个参数,代表把前面需要融合的变量融合进一个新的变量里面,并且命名为year,其对应的值为另一个新的变量,列名字为case,这句代码就是用两个变量融合之后产生新的两个变量

当然下面的也是啦

table4b %>%
   gather(`1999`, `2000`, key = "year", value = "population")

webp

image

Spreading

这个函数可能稍微有点难理解,他做的就是把数据按照type类型进行填充

table2
spread(table2, key = type, value = count)

webp

image

可以看到在原始表格中type类型就只有两种,分别是case和population
然后我们把type变量传递给了key参数,相当于就只会产生新的两列,也就是说type有几个类别,就会产生新的几列,
然后value值使用count这一列来填充

下面我们再看一下数据的切割和整合

Separating and uniting

Separating函数是对数据进行切割出列,默认是可以匹配任意字符(标点字符)
table3
table3 %>%
separate(rate, into = c("cases", "population"))

webp

image

这个我们就清楚了,就是把rate这一列按照 / 符号分成两列,且列名为case,population
如果希望使用特定的字符分隔列,可以将该字符传递给sep的separate()参数。例如,我们可以将上面的代码重写为:
table3 %>%
   separate(rate, into = c("cases", "population"), sep = "/")
仔细查看列类型:您将注意到大小写和填充都是字符列。这是separate()中的默认行为:它保留列的类型不变。但是在#####这里,它并不是很有用,因为这些都是数字。我们可以要求separate()使用更好的类型进行尝试和转换
table3 %>%
   separate(rate, into = c("cases", "population"), convert = TRUE)

webp

image

Unite

unite是sperate的反函数,代表的是组合

webp

image

table5 %>%
   unite(new, century, year)
在这种情况下,我们还需要使用sep参数。默认情况下,在来自不同列的值之间放置下划线(_)。这里我们不需要任何分#####隔符,所以我们使用“”
table5 %>%
   unite(new, century, year, sep = "")

webp

image



作者:走在进步的路上
链接:https://www.jianshu.com/p/336d8530e650


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消