前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >tidyverse

tidyverse

作者头像
生信喵实验柴
发布2022-10-25 19:49:14
1.6K0
发布2022-10-25 19:49:14
举报
文章被收录于专栏:生信喵实验柴生信喵实验柴

背景

Tidyverse 是 Rstudio 公司推出的专门使用 R 进行数据分析的一整套工具集合,里面包括了readr,tidyr, dplyr,purrr,tibble,stringr, forcats,ggplot2 等包。https://github.com/tidyverse/

Tidyverse 包含模块

这些包涵盖了数据读取,清洗,转换,字符串处理,建模,数据可视化,生成报告等完整过程。可以阅读《R 数据科学》查看完整教程。

《R 数据科学》电子书:https://r4ds.had.co.nz/

tidyverse 包重构了 R 语言处理数据的语法,比默认的 R 函数更加方便,相当于一套新的语法,使用起来更加方便。但是并不是所有的 R 包都兼容这套语法。

tidyr 与 dplyr 包是用 R 语言中用来处理各种数据整合分析的包,可以说是 R 数据整合的“瑞士军刀”,tidyr 包负责将数据重新整合,dplyr 包可以完成数据的排序,筛选,分类计算等都等操作,还包括各种集合的运算。掌握这两个包就可以完成绝大部分的数据处理工作。

官网:https://www.tidyverse.org/

一、tidyr 数据整理

tidyr 包用于将数据重新整合,替代之前的 reshape 和 reshape2 包,用于数据的重塑与聚合,类似于 Excel 中的数据透视功能 pivot。tidyr 之前的版本主要包含以下几个重要函数:

gather:宽数据变成长数据;

spread:长数据变成宽数据;

unite:将多列按指定分隔符合并为一列

目前最新的版本中主要提供 pivot_longer,pivot_wider 等函数。

1.1 整洁数据

tidyr 名字来自于 tidy(整洁)一词。所谓“整洁数据”,根据 Hadley Wickham 对整洁数据的专门研究,其定义如下:

1. 每个变量构成一列;

2. 每项观察构成一行;

3. 每种类型的观察单元构成一个表格;

tidy data 定义:https://cran.r-project.org/web/p ... ttes/tidy-data.html

总而言之,让数据变地更好用(符合下层函数参数的格式要求),方便用户查找和阅读。简而言之:易阅读,方便用。数据的整理是一个从数据框的统计结构(变量与观察值)到形式结构(列与行)的映射。

tidyr 包主要就是用来将数据转换为“整洁数据”的包,主要功能为

1)缺失值的简单补齐

2)长形表变宽形表与宽形表变长形表;

1.2 长数据与宽数据

长数据

宽数据

1.3 稀疏矩阵与稠密矩阵

在矩阵中,若数值为 0的元素数目远远多于非0元素的数目,并且非 0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非 0 元素数目占大多数时,则称该矩阵为稠密矩阵。

稀疏矩阵( sparse matrix)

代码语言:javascript
复制
OTU ID sampleA sampleB sampleC
OTU0 0 0 4
OTU1 6 0 0
OTU2 1 0 7
OTU3 0 0 3

稠密矩阵( dense matrix )

代码语言:javascript
复制
sampleA OTU1 6
SampleA OTU2 1
SampleC OTU0 4
SamppleC OTU2 7
SampleC OTU3 3

1.4 数据“融化”与“重铸”

数据“融化”melt 与“重铸”cast 来自于 reshape 包中的概念。这些概念非常形象地描述了数据转换的过程。melt 将数据转换为长数据,cast 重新调整变量。tidyr 数据转换也是类似的方法。

二、tidyr 使用案例

代码语言:javascript
复制
library(tidyverse)
library(tidyr)
tdata <- mtcars[1:10,1:3]
tdata
gather(tdata)
tdata <- data.frame(name=rownames(tdata),tdata)
gather(tdata,key = "Key",value = "Value",cyl:disp)
gather(tdata,key = "Key",value = "Value",mpg,cyl,-disp)
gather(tdata,key = "Key",value = "Value",cyl,disp,mpg)

df <- data.frame(x = c(NA, "a.b", "a.d", "b.c"))
df
separate(df,col=x,into = c("A","B"))
df <- data.frame(x = c(NA, "a.b-c", "a-d", "b-c"))
separate(df,x,into = c("A","B"),sep = "-")

#宽数据变长数据
table4a
pivot_longer(table4a, cols = 2:3)
pivot_longer(table4a, cols = 2:3, names_to ="year",values_to = "cases")
tdata
pivot_longer(tdata, cols = 1:2)
pivot_longer(tdata, cols = 1:2, names_to = 'new')
#长数据变宽数据
x <- pivot_longer(table4a, cols = 2:3, names_to ="year",values_to = "cases")
pivot_wider(x, names_from = year,values_from = cases)
table2
pivot_wider(table2, names_from = type,values_from = count)
代码语言:javascript
复制
billboard
pivot_longer(billboard,cols = starts_with('wk'),names_to = 'week')
pivot_longer(billboard,cols = starts_with('wk'),names_to = 'week',
             names_prefix = 'wk',values_to = 'rank',values_drop_na = T)

写在最后:有时间我们会努力更新的。大家互动交流可以前去论坛,地址在下面,复制去浏览器即可访问,弥补下公众号没有留言功能的缺憾。原地址暂未启用(bioinfoer.com)。

代码语言:javascript
复制
sx.voiceclouds.cn

有些板块也可以预设为大家日常趣事的分享等,欢迎大家来提建议。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信喵实验柴 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档