dplyr_Package
前言:讲解dplyr包在数据处理中的使用,此包将原本plyr包中的ddply()等函数进一步分离强化, 专注接受 ‘dataframe’对象, 大幅提高了处理数据的速度, 并且提供了更稳健的与其它数据库对象间的接口。
一、数据重塑tbl.df()
##观察数据的形状 hflights数据集
dim(mtcars)
## [1] 32 11
#32条纪录,11个字段,
library(dplyr)
tbl_df(mtcars)
## # A tibble: 32 × 11
## mpg cyl disp hp drat wt qsec vs am gear carb
## * <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
## 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## 9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## 10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
## # ... with 22 more rows
二、基础数据操作
1.筛选特定条件的数据 filter()函数
filter(mtcars,am==1,mpg<20)# 且的关系
filter(mtcars,am==1|mpg<20)# 或的关系
2.排列 arrange()
arrange(mtcars,am,gear,carb) #默认正序排列
arrange(mtcars,am,desc(gear))#部分倒序
3.选择select()
#选择部分列,构造新的数据集
select(mtcars,mpg,am)
#按照列的位置,选取am至carb列
select(mtcars,am:carb)
#排除部分列
select(mtcars,-(am:carb))
4.变形数据集 mutate()
#将原数据集新增加一列num,为mpg与hp之和
mutate(mtcars,num=mpg+hp)
5.分组数据集 group_by()
gb<-group_by(mtcars,cyl)
#根据cyl的组别,计算disp均值和方差
summarise(gb,mean(disp),sd(disp))
## # A tibble: 3 × 3
## cyl `mean(disp)` `sd(disp)`
## <dbl> <dbl> <dbl>
## 1 4 105.1364 26.87159
## 2 6 183.3143 41.56246
## 3 8 353.1000 67.77132
#在已有cyl分组基础上,找出disp的最大值
filter(gb,disp==max(disp))
## Source: local data frame [3 x 11]
## Groups: cyl [3]
##
## mpg cyl disp hp drat wt qsec vs am gear carb
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## 2 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## 3 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
6.变量重命名 rename()
rename(mtcars,mpg1=mpg,am1=am)
7.数据聚合 summarise() 数据的聚合操作常常在数据库中使用,聚合函数显得尤为重要
#将mpg方差,disp均值,wt的最大值聚合在一个数据集上
summarise(mtcars,sd(mpg),mean(disp),max(wt))
## sd(mpg) mean(disp) max(wt)
## 1 6.026948 230.7219 5.424
#分组聚合
summarise(group_by(mtcars,cyl),sd(mpg),mean(disp),max(wt))
## # A tibble: 3 × 4
## cyl `sd(mpg)` `mean(disp)` `max(wt)`
## <dbl> <dbl> <dbl> <dbl>
## 1 4 4.509828 105.1364 3.190
## 2 6 1.453567 183.3143 3.460
## 3 8 2.560048 353.1000 5.424
8.数据关联 join()
内联函数:inner_join()
左联函数:left_join()
右联函数:right_join()
全联函数:full_join()
semi_join:返回能够与y表匹配的x表的所有记录
anti_join:返回无法与y表匹配的x表的所有记录
9.数据合并 bind_cols() && bind_rows()
bind_rows(data1,data2)#data1与data2有相同的行
bind_cols(data1,data2)#data1与data2有相同的列
10.管道函数 %>%(属于dplyr包特有的函数)
#将上一个函数的输出作为下一个函数的输入,简化书写
group_by(mtcars,cyl)%>%summarise(mean(disp),mean(hp))
## # A tibble: 3 × 3
## cyl `mean(disp)` `mean(hp)`
## <dbl> <dbl> <dbl>
## 1 4 105.1364 82.63636
## 2 6 183.3143 122.28571
## 3 8 353.1000 209.21429
11.随机和非随机函数
#非随机选取部分列
slice(mtcars,1:10)
#随机选取样本,行
sample_n(mtcars,10)#选取10个样本
sample_frac(mtcars,0.2)#选取20%样本
12.计数函数 count()
#按照特定的列,计数统计
count(mtcars,am,cyl)#按着am和cyl的因子水平,计数
## Source: local data frame [6 x 3]
## Groups: am [?]
##
## am cyl n
## <dbl> <dbl> <int>
## 1 0 4 3
## 2 0 6 4
## 3 0 8 12
## 4 1 4 8
## 5 1 6 3
## 6 1 8 2
三、外部数据库连接MySQL
#下载功能包
library(RMySQL)
# 前提准备
> library(RMySQL)
# 数据库连接
> test <- src_mysql('qwer', host = NULL, port = 0L,
user = "root", password = "123456")
# 获取数据集 tbl()
# 提取test数据集中的q1数据表
> data_mysql <- tbl(test,from='q1')
> data_mysql
Source: query [?? x 6]
Database: mysql 5.5.22 [root@localhost:/qwer]
id name sex age city address
<int> <chr> <chr> <int> <chr> <chr>
1 1 甲 男 25 北京 朝阳
2 2 乙 女 12 北京 海淀
3 3 丙 男 23 北京 东城
4 4 丁 女 14 上海 徐汇
5 5 戊 男 30 广州 越秀