孙老师作品---数据整合之tidyr包
欢迎加入生信者言讨论群,和我们一起交流,入群请联系微信:genegogo007
在数据整合过程中,有很多优秀的包可供调用,其中tidyr包是大神Hadley Wickham的大作,主要提供了一个类似Excel中数据透视表(pivot table)的功能,使用方便、快捷。可用于处理dataframe格式数据的整合,它的前身是reshape2包,在数据整合过程中常联合dplyr包使用(猛戳看原文)。
数据整合常用包,及其相似函数:
tidyr | gather | spread |
reshape(2) | melt | cast |
spreadsheets | unpivot | pivot |
databases | fold | unfold |
tidyr处理的dataframe格式数据有以下三个特点:
每一列表示一个变量
每一行表示一个样本
每一个单元格表示观测值
dplyr是发布在github上的开源包,安装方法如下:
# Theeasiest way to get tidyr is to install the whole tidyverse:
install.packages("tidyverse")
#Alternatively, install just tidyr:
install.packages("tidyr")
# Or thethe development version from GitHub:
#install.packages("devtools")
devtools::install_github("tidyverse/tidyr")
tidyr包常用的函数:
gather 数据融合,宽数据转为长数据
spread 数据重铸,长数据转为宽数据
separate 将一列按分隔符分割为多列
unite 将多列按指定分隔符合并为一列
1
gather函数
数据融合,宽数据转为长数据,原理图如下:
数据集table4a有3列,分别是country、1999、2000,如下图:
我只想融合1999和2000两列,而不融合country,有两种操作方法:
第一种:
table4a_gather<- gather(table4a, key = "key", value = "value",-country)
table4a_gather
第二种:
table4a_gather<- gather(table4a, `1999`, `2000`, key = "year", value ="cases")
table4a_gather
2
spread函数
数据重铸,其实就是gather的逆过程,原理图如下:
比如我想把数据集table2得type列重铸:
具体代码如下:
table2_split<- spread(table2, key = type, value = count)
table2_split
3
separate函数
将一列按分隔符分割为多列,原理图如下:
数据集table3的rate列是由斜杠分割的数据,separate函数可以把rate列分割成两列:
具体代码如下:
# into参数指定分隔之后的列名,sep参数指定分隔符
table3_sep<- separate(table3, rate, into = c("cases","population"), sep = "/")
table3_sep
4
unite函数
将多列按指定分隔符合并为一列,原理图如下:
比如我想把数据集table5得century和year列合并为一列:
具体代码如下:
# col参数指定合并之后的列名称,sep参数指定分隔符
table5<- as.data.frame(table5)
table5_uni<- unite(table5, col = new, century, year, sep = "")
/End.
推荐阅读
点击下方图片即可阅读
扫码关注,获取更多精彩内容
我
是
彩
蛋
喜马拉雅FM搜索并订阅:生信者言;收听内容:
《一分钟听懂NGS基础概念》,让生信分析不再遥不可及
《亲爱的姑娘,你值得被温柔以待》,11个真实的人物故事
《众病之王:癌症传》,一起聆听人类对抗癌症的斗争史
回复文字:果然科学,看一篇好玩的科普文。