前面我们介绍了如何使用ggplot进行数据可视化,这一节我们来讨论如何利用dplyer进行数据转换。
生在大数据时代,我们无时无刻不接受和记录着各种各样的数据,想要利用这些数据进行可视化,就需要数据格式完全符合我们的要求,然而这种情况是非常罕见的。一般来说我们都需要对数据进行筛选、排序、选取、创建、汇总等步骤的加工,才能得到结构完整,符合绘图要求的数据。
1 使用filter函数进行筛选
library(nycflights13)
library(tidyverse)
filter() 函数可以基于观测的值筛选出一个观测子集。它的第一个参数是数据框,后面的参数是筛选条件。我们使用nycflights13包中的数据flights来说明dplyr包的核心理念,并使用ggplot2来帮助我们理解数据。flights数据集包含336776 行,19列。我们首先看看它的一些基本信息。
flights
## # A tibble: 336,776 x 19
若我们现在需要筛选2013年,1月份的航班信息,则可以这样操作。
fl_201301
fl_201301
## # A tibble: 27,004 x 19
2 使用 arrange函数进行行排序
arrange函数的工作方式与filter函数非常相似,只是功能是排列数据行的顺序,而不是筛选。比如我们按照航班年份倒序进行排列数据,可以这样操作。
rk
rk
## # A tibble: 336,776 x 19
## year month day dep_time sched_dep_time dep_delay arr_time
3 使用 select函数进行选择列
一个数据集可能有很多变量,如flights有19个变量,但是我们感兴趣或者真正用到的只有其中某几个,这就需要我们对变量进行选择,而select函数可以很好的解决这个问题。比如我们只想知道航班的时间、航空公司的名字、到达地点,则可以这样操作。
subs
subs
## # A tibble: 336,776 x 5
通过查看select函数的帮助,可以知道select函数内还可以添加starts_with(),ends_with(),contains(),everything()等函数作为参数,实现更加灵活地额选择工作。
4 使用 mutate函数添加新变量
当我需要向数据集中添加新列时,我可以用mutate函数来实现,它总是将新列添加在数据集的最后。比如我们在flights最后一列加上我的名字,可以这样操作。
newf
newf
newf
## # A tibble: 336,776 x 1
如果只想保留新变量,则可以选择使用transmute函数。
newf2
newf2
## # A tibble: 336,776 x 1
5 使用summarize函数进行分组汇总
summarize函数可以对数据实现很的汇总,通常与group_by联合使用。如果想知道每个月有多少个航班,航班到达延误的平均时间,则可以这样操作。
summarize(group_by(flights, month), count=n(),delay = mean(arr_delay, na.rm = TRUE))
## # A tibble: 12 x 3
6 使用管道操作符(%>%)进行多种操作
管道操作符是数据处理中一个非常便利的粉工具,它使得代码具有更好的可读性。例如上述的每月航班数量和平均到达的延误时间可以这样操作。%>%读作“然后”
flights%>%group_by(month)%>%
summarize(count=n(),
delay=mean(arr_delay,na.rm = TRUE))
## # A tibble: 12 x 3
当然我们也可以通过ggplot来查看一下每月的航班数量是怎样的情况。
flights%>%group_by(month)%>%
summarize(count=n(),
delay=mean(arr_delay,na.rm = TRUE))%>%
ggplot(mapping = aes(x=month,y = count)) +
geom_bar(stat = "identity")+
scale_x_continuous(breaks=1:12,label=paste(1:12,"月",sep=""))
领取专属 10元无门槛券
私享最新 技术干货