tidyverse —— tidyr包

浏览: 2049

tidyr包,tidyverse工具箱中的改锥和锤子,哪儿不顺眼修哪里,犀利得好比找茬儿的老板,专注把数据在长和宽的形态中互转,功能类似reshape2包,本篇顺带也回顾一下reshape2包。

1. reshape2包

1.1 melt函数

以airquality数据为例,先把变量名全改成小写,方便之后的处理

names(airquality) <- tolower(names(airquality))

melt函数用于宽数据转长数据,语法如下

melt(data, id.vars, measure.vars, variable.name = "variable", ..., na.rm = FALSE, value.name = "value", factorsAsStrings = TRUE)

第二个参数id用于指明需要保存的变量,第三个参数measure用于指明哪些变量,其名字都作为新生成的变量variable的因子,其取值作为新生成的变量value的取值。第三个参数不填的话,则默认除第二个参数指明的变量外,其余变量都作为第三个参数。举个例子

aqm <- melt(airquality, id=c("month", "day"), na.rm=TRUE)
head(aqm)

image.png


1.2 cast函数

类似Excel的透视表,有acast和dcast,前者返回向量或数组,后者返回数据框。用法如下

acast(aqm, variable ~ month, mean, subset = .(variable == "ozone"))

image.png

第三个参数为函数,指明要求的值,subset指明范围。不填函数的话,day、month和variable三个变量分别标示了得到的数组a的三个维度

a <- acast(aqm, day ~ month ~ variable)
str(a)

image.png



2. tidyr包

2.1 gather函数

gather函数的功能和melt函数对应,但是语法要友好得多,非常有范儿,Hadley出品,必属精品。举个例子

image.png

table4a原本的1999和2000两个变量被转换成了新变量year的因子,原来的值被储存在新变量cases中。


2.2 spread函数

spread函数作用和gather相反,举例如下,经过gather和spread两个函数的操作,得到的结果和原来的数据一毛一样

table4a
table4a %>%
gather(`1999`, `2000`, key = "year", value = "cases") %>%
spread(key = 'year', value = 'cases')

image.png


2.3 separate函数

恰如其名,把一列拆成多列,sep参数可以匹配正则表达式,也可以是数字,表示在该数字长度处进行拆分变量,举例如下

table3
table3 %>%
separate(year, into = c("century", "year"), sep = 2)

image.png

into参数表示新生成的变量的名字,默认删除被拆分的变量,如果想要不删除的话,就设置remove参数为FALSE

table3 %>%
separate(rate, into = c("cases", "population"), convert = TRUE, remove = F)

image.png


2.4 unite函数

unite函数就很简单了,separate函数的反向操作,多列合作一列。如下,经过separate和unite函数的双重作用,table3还是原来的模样

image.png


话说,距离上一篇笔记已经很久了

但是我还没有放弃这个专栏

就像我还没有放弃这么蠢的自己

在这里给自己和大家打打气

坚持下去

你就会发现

以后的困难还多着呢OT2

推荐 1
本文由 野菜团子 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册