生信人

找回密码
立即注册
搜索
热搜: 活动 交友 discuz
发新帖

0

收听

12

听众

279

主题
发表于 2022-9-3 20:34:48 | 查看: 852| 回复: 0
背景
       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)

  1. OTU ID sampleA sampleB sampleC
  2. OTU0 0 0 4
  3. OTU1 6 0 0
  4. OTU2 1 0 7
  5. OTU3 0 0 3
复制代码
稠密矩阵( dense matrix )

  1. sampleA OTU1 6
  2. SampleA OTU2 1
  3. SampleC OTU0 4
  4. SamppleC OTU2 7
  5. SampleC OTU3 3
复制代码


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


二、tidyr 使用案例
  1. library(tidyverse)
  2. library(tidyr)
  3. tdata <- mtcars[1:10,1:3]
  4. tdata
  5. gather(tdata)
  6. tdata <- data.frame(name=rownames(tdata),tdata)
  7. gather(tdata,key = "Key",value = "Value",cyl:disp)
  8. gather(tdata,key = "Key",value = "Value",mpg,cyl,-disp)
  9. gather(tdata,key = "Key",value = "Value",cyl,disp,mpg)

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

  15. #宽数据变长数据
  16. table4a
  17. pivot_longer(table4a, cols = 2:3)
  18. pivot_longer(table4a, cols = 2:3, names_to ="year",values_to = "cases")
  19. tdata
  20. pivot_longer(tdata, cols = 1:2)
  21. pivot_longer(tdata, cols = 1:2, names_to = 'new')
  22. #长数据变宽数据
  23. x <- pivot_longer(table4a, cols = 2:3, names_to ="year",values_to = "cases")
  24. pivot_wider(x, names_from = year,values_from = cases)
  25. table2
  26. pivot_wider(table2, names_from = type,values_from = count)
复制代码
  1. billboard
  2. pivot_longer(billboard,cols = starts_with('wk'),names_to = 'week')
  3. pivot_longer(billboard,cols = starts_with('wk'),names_to = 'week',
  4.              names_prefix = 'wk',values_to = 'rank',values_drop_na = T)
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

您需要登录后才可以回帖 登录 | 立即注册

QQ|Archiver|手机版|小黑屋|生信人

GMT+8, 2024-5-6 21:36 , Processed in 0.064285 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表