Tidy data
每个变量必须有自己的列
每个观察必须有自己的行
每个值必须有自己的单元格
image
这意味着对于大多数真正的分析,你需要做一些整理。第一步总是找出变量和观测值。有时这很简单;其他时候,您需要与最初生成数据的人员进行协商。第二步是解决两个常见问题之一:
一个变量可能跨多个列分布。
一个观察可能分散在多行中。
通常,数据集只会遇到这些问题之一;只有当你真的不走运时,它才会同时遭受这两种痛苦!要解决这些问题,您需要tidyr中的两个最重要的函数:gather()和spread()。
gather()和spread()
gather函数字如其意,就是代表数据的融合,聚合,下面这张图就很好展示出其含义
image
这个表就是将原始表格的时间列融合成两个新变量,year和cases,建立一种一一对应关系。
代码:
library(tidyverse) table4a %>% gather(`1999`, `2000`, key = "year", value = "cases")
image
这个函数两个重要的点:第一 key这个参数,代表把前面需要融合的变量融合进一个新的变量里面,并且命名为year,其对应的值为另一个新的变量,列名字为case,这句代码就是用两个变量融合之后产生新的两个变量
当然下面的也是啦
table4b %>% gather(`1999`, `2000`, key = "year", value = "population")
image
Spreading
这个函数可能稍微有点难理解,他做的就是把数据按照type类型进行填充
table2 spread(table2, key = type, value = count)
image
可以看到在原始表格中type类型就只有两种,分别是case和population
然后我们把type变量传递给了key参数,相当于就只会产生新的两列,也就是说type有几个类别,就会产生新的几列,
然后value值使用count这一列来填充
下面我们再看一下数据的切割和整合
Separating and uniting
Separating函数是对数据进行切割出列,默认是可以匹配任意字符(标点字符)
table3 table3 %>% separate(rate, into = c("cases", "population"))
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)
image
Unite
unite是sperate的反函数,代表的是组合
image
table5 %>% unite(new, century, year)
在这种情况下,我们还需要使用sep参数。默认情况下,在来自不同列的值之间放置下划线(_)。这里我们不需要任何分#####隔符,所以我们使用“”
table5 %>% unite(new, century, year, sep = "")
image
作者:走在进步的路上
链接:https://www.jianshu.com/p/336d8530e650
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦