【数据整理】用dplyr包进行数据操作
dplyr包是由Hadely Wickham编写的,并用于数据操作的包。这个包给我们用户提供了一个关于探索性数据分析以及操作中,一些功能强大,而且容易操作的函数的一个程序包。这里,我会讲述几个关于dplyr包里最常用的几个函数。
在这篇文章中,我会使用来自database这个程序包里的airquality这个数据集,而这个数据集包含了关于纽约1973年5月到1973年9月中关于空气质量测量的相关信息。下面,我们先来简单的预览一下这个数据集:
head(airquality)
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
5 NA NA 14.3 56 5 5
6 28 NA 14.9 66 5 6
在使用相关函数之前,我们首先要安装好这两个包:
library(datasets)
library(dplyr)
好了,我们现在就开始使用里面的函数吧。
Filter
Filter函数可返回满足所有给定条件的行。例如,一下的例子将要返回满足Temp>70的所有行:
filter(airquality, Temp > 70)
Ozone Solar.R Wind Temp Month Day
1 36 118 8.0 72 5 2
2 12 149 12.6 74 5 3
3 7 NA 6.9 74 5 11
4 11 320 16.6 73 5 22
5 45 252 14.9 81 5 29
6 115 223 5.7 79 5 30
...
另一个条件则是返回满足Temp>80以及五月以后的所有行:
filter(airquality, Temp > 80 & Month > 5)
Ozone Solar.R Wind Temp Month Day
1 NA 286 8.6 78 6 1
2 NA 287 9.7 74 6 2
3 NA 186 9.2 84 6 4
4 NA 220 8.6 85 6 5
5 NA 264 14.3 79 6 6
...
Mutate
Mutate函数可对现有的数据集添加新的变量。例如,我们现在对airquality这个数据集添加一个关于摄氏度的列,结果如下:
mutate(airquality, TempInC = (Temp - 32) * 5 / 9)
Ozone Solar.R Wind Temp Month Day TempInC
1 41 190 7.4 67 5 1 19.44444
2 36 118 8.0 72 5 2 22.22222
3 12 149 12.6 74 5 3 23.33333
4 18 313 11.5 62 5 4 16.66667
5 NA NA 14.3 56 5 5 13.33333
...
Summarise
Summarise函数可用于把多个变量汇总成一个变量。当调用这个在dplyr包里的函数用于把其它函数连接起来的时候功能是非常强大的,而后面就会给大家展示。na.rm=TRUE表示把数据集里的空值清除掉,如果我们要计算每个月平均温度时就要用到这个参数了,过程如下:
summarise(group_by(airquality, Month), mean(Temp, na.rm = TRUE))
Month mean(Temp)
1 5 65.54839
2 6 79.10000
3 7 83.90323
4 8 83.96774
5 9 76.90000
Group by
Group_by函数可作用于一个数据集中一个或多个变量中。下面,我们将在summarise函数里写入Group_by函数,并在里面添加mean函数以用于计算每个月的平均温度:
summarise(group_by(airquality, Month), mean(Temp, na.rm = TRUE))
Month mean(Temp)
1 5 65.54839
2 6 79.10000
3 7 83.90323
4 8 83.96774
5 9 76.90000
Sample
Sample函数可用于选择一个数据集里的任意一行或多行的数据。下面的演示中,第一行代码是要在一个数据集中随机选取行,而第二行则从数据集中随机选取15行(因为airquality这个数据集中一共有153行,而153/10=15。
sample_n(airquality, size = 10)
sample_frac(airquality, size = 0.1)
Count
Count函数则是基于一组观测值计算里面的数量。它和table函数确实有一点相似之处,例如:
count(airquality, Month)
Month n
1 5 31
2 6 30
3 7 31
4 8 31
5 9 30
上面的代码意味着5月包含31行,6月包含30行,以此类推。
Arrange
Arrange可用于根据不同的变量进行行的排列。现在,airquality这个数据集是根据月份已经日来排列的。我们可以使用Arrange函数对月份进行行的降序排列,然后对天进行升序排列:
arrange(airquality, desc(Month), Day)
Ozone Solar.R Wind Temp Month Day
1 96 167 6.9 91 9 1
2 78 197 5.1 92 9 2
3 73 183 2.8 93 9 3
4 91 189 4.6 93 9 4
5 47 95 7.4 87 9 5
6 32 92 15.5 84 9 6
Pipe
Pipe在R中的操作,由%>%表示,这个符号可以把代码串联起来。当你想要对一个数据集进行多种操作和不想在每个步骤中都进行结构的存储的时候,这个函数则能派上用场。
例如,如果我们想要把与5月份相关的数据全部移除的时候,并且我们还要对数据进行聚集操作,同时还要计算每个月的平均气温时,我们就需要Pipe。而传统的方法进行上述操作的写法如下:
filteredData <- filter(airquality, Month != 5)
groupedData <- group_by(filteredData, Month)
summarise(groupedData, mean(Temp, na.rm = TRUE))
用Pipe函数的话,写法如下:
airquality %>%
filter(Month != 5) %>%
group_by(Month) %>%
summarise(mean(Temp, na.rm = TRUE))
上面的例子是非常基础的,而且效果看起来其实也并不是那么的明显,但是随着数据量的增大,或则使用函数的数量的增加,这个函数的用处将是越来越大。
现在,我们已经来到文章的末尾了。我希望你能享受你现在使用这些函数的过程,而且也希望你觉得这篇文章对于你来说是有用的。如果你有什么问题,我希望你可以留言或者关注我的推特。
原文链接:http://www.r-bloggers.com/data-manipulation-with-dplyr/
何品言,热爱英语和数据科学。
严禁修改,可以转载,请注明出自数据人网和原文链接:http://shujuren.org/index.php/Article/update/aid/152
更多精彩内容,请点击阅读原文。
数据人网(http://shujuren.org),数据人学习、交流和分享的家园,专注于从数据中学习,努力发觉数据之洞见,积极利用数据之价值。为“让人懂数据、用数据”之使命坚持做点事情。大家可以来投稿,做分享和传播,可以给反馈。您有什么想法,请反馈给我们,谢谢。数据人网,我们共建和共享。
数据人网构建了数据人圈子,诚邀热爱数据和利用数据朋友入群。加小编微信:luqin360,注明入圈子。
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!