|
发表于 2022-9-3 20:34:48
|
查看: 2091 |
回复: 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)
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
|