打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
R for Data Science (七)

Tidy data

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

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

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

mark

这意味着对于大多数真正的分析,你需要做一些整理。第一步总是找出变量和观测值。有时这很简单;其他时候,您需要与最初生成数据的人员进行协商。第二步是解决两个常见问题之一:

一个变量可能跨多个列分布。
一个观察可能分散在多行中。

通常,数据集只会遇到这些问题之一;只有当你真的不走运时,它才会同时遭受这两种痛苦!要解决这些问题,您需要tidyr中的两个最重要的函数:gather()和spread()。

gather()和spread()

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

mark
这个表就是将原始表格的时间列融合成两个新变量,year和cases,建立一种一一对应关系。
代码:
library(tidyverse)
table4a %>%
 gather(`1999`, `2000`, key = 'year', value = 'cases')
mark
这个函数两个重要的点:第一 key这个参数,代表把前面需要融合的变量融合进一个新的变量里面,并且命名为year,其对应的值为另一个新的变量,列名字为case,这句代码就是用两个变量融合之后产生新的两个变量

当然下面的也是啦

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

Spreading

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

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

可以看到在原始表格中type类型就只有两种,分别是case和population

然后我们把type变量传递给了key参数,相当于就只会产生新的两列,也就是说type有几个类别,就会产生新的几列,

然后value值使用count这一列来填充

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

Separating and uniting

Separating函数是对数据进行切割出列,默认是可以匹配任意字符(标点字符)

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

Unite

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


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
R语言 | 数据操作tidyr包
孙老师作品---数据整合之tidyr包
R语言 tidyr包的三个重要函数:gather,spread,separate的用法和举例
R语言学习----数据缺失值,表整理
“了不起的R语言”第六课:tidyr包的应用
30 天学会R DAY 15:tidyr包,数据整理另外一个利器
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服