分享

孙老师作品---数据整合之tidyr包

 萌小芊 2017-11-22




在数据整合过程中,有很多优秀的包可供调用,其中tidyr包是大神Hadley Wickham的大作,主要提供了一个类似Excel中数据透视表(pivot table)的功能,使用方便、快捷。可用于处理dataframe格式数据的整合,它的前身是reshape2包,在数据整合过程中常联合dplyr包使用(猛戳看原文)


数据整合常用包,及其相似函数:


tidyr

gather

spread

reshape(2)

melt

cast

spreadsheets

unpivot

pivot

databases

fold

unfold

 

tidyr处理的dataframe格式数据有以下三个特点:


  1. 每一列表示一个变量

  2. 每一行表示一个样本

  3. 每一个单元格表示观测值 



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包常用的函数:

 

  1. gather       数据融合,宽数据转为长数据

  2. spread      数据重铸,长数据转为宽数据

  3. separate   将一列按分隔符分割为多列

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

 

 

1

gather函数

数据融合,数据转为长数据,原理图如下

 

 


数据集table4a有3列,分是country、1999、2000,如下

 

 

我只想融合1999和2000两列,而不融合country,有两种操作方法:


第一种:

table4a_gather<- gather(table4a,="" key='key' ,="" value='value'>

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="">

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<->

table5_uni<- unite(table5,="" col="new," century,="" year,="" sep=''>

 




/End.







    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多