| 
 
 | 
 
 
发表于 2022-9-3 20:34:48
|
查看: 3288 |
回复: 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) 
 
- OTU ID sampleA sampleB sampleC
 
 - OTU0 0 0 4
 
 - OTU1 6 0 0
 
 - OTU2 1 0 7
 
 - OTU3 0 0 3
 
 
  复制代码 稠密矩阵( dense matrix ) 
 
- sampleA OTU1 6
 
 - SampleA OTU2 1
 
 - SampleC OTU0 4
 
 - SamppleC OTU2 7
 
 - SampleC OTU3 3
 
  复制代码 
 
1.4 数据“融化”与“重铸” 
       数据“融化”melt 与“重铸”cast 来自于 reshape 包中的概念。这些概念非常形象的描述了数据转换的过程。melt 将数据转换为长数据,cast 重新调整变量。tidyr 数据转换也是类似的方法。 
 
 
二、tidyr 使用案例 
- 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)
 
  复制代码- 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)
 
  复制代码 
 
 |   
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
 
 
  
 |