dplyr包–数据操作及清洗

  图片 1

1.简介

  以大家多少解析的实际上应用被,我们恐怕会面花费大量底流年以数据清洗上,而如若使用
R 里面自带的一部分函数(base 包的 transform
等),可能相会以为力不从心,或者未是老人性化。好于大家出另选拔。这里我们介绍
dplyr 包。

首先加载包:

install.packages("dplyr")
library(dplyr)

单表操作函数(one table verbs)如下:

    filter: 保留满足条件的行
    select: 使用列名选出列
    arrange: 对数据的所有行排序
    mutate: 添加新的变量
    summarise: 分类汇总

这个函数的结构如下:

operationName(.data, ...)
operationName _(.data, ..., .dots)
# transmute对已有列进行数据运算并添加为新列删除原来的列
transmute(.data, ...)
transmute_(.data, ..., .dots)
# slice根据位置选择行
slice(.data, ...)
slice_(.data, ..., .dots)

参数表达:

  • 第一个参数为 data frame 名
  • 连下的参数是恃定函数操作的依据(或规范)
  • 平凡重临的凡一个 data frame

为重新好地表述大家的操作,这里运用一个结构的 data frame。

df <- data.frame(color = c("blue", "black", "blue", "blue", "black"),value = 1:5)
View(df)

图片 2

2.filter–保留满意条件的尽

# filter返回满足条件的行
filter(.data, ...)
filter_(.data, ..., .dots)

  filter 用于拔取满意条件的相(行),第一独参数是 data frame
名字,第二单参数是极。那里选出五只例子,我们对地点构造的 data frame 进行filter 操作。第一个例要求选择 color == blue 的观望;
第二单例子要求选用 value == 1 要 value == 4 的相。

# 选取 `color == blue` 的观测
> filter(df, color == "blue")
##    color value
## 1  blue     1
## 2  blue     3
## 3  blue     4
# 选取 `value == 1` 或者 `value == 4 ` 的观测。
> filter(df, value %in% c(1, 4))
##    color value
## 1  blue     1
## 2  blue     4

意义如下:

图片 3 

注意:
这里要提示的凡,对于多规格的抉择,需要总体条件的,然后使用集合运算符将条件拼接起来。集合运算符有
!、|、&、xor(交补)。条件的论断符有>(=)、<(=)、==、!=、%in%
(判断元素是否以集合或者列表内,再次来到逻辑值)。如下:

filter(flights, dest %in% c("SFO", "OAK"))
filter(flights, dest == "SFO" | dest == "OAK")
 # 下面是错误写法
filter(flights, dest == "SFO" | "OAK")

3.select–增选得之排

# select选择需要的变量keeps only the variables you mention
select(.data, ...)
select_(.data, ..., .dots)

select用于接纳要之排:

> select(df, color)
##    color
## 1  blue
## 2 black
## 3  blue
## 4  blue
## 5 black
> select(df, -color)
##    value
## 1     1
## 2     2
## 3     3
## 4     4
## 5     5

注意:select
负号表示不选。其中变量的扬言还发出任何花样,比如B:F表示于 B 列到
F 列所有列
ends_with(“string”) 表示拔取列名以 string
结尾的方方面面列;contains(“string”) 表示接纳列名中包含 string
的有列
。代码如下:

select(flights, arr_delay, dep_delay)
select(flights, arr_delay:dep_delay)
select(flights, ends_with("delay"))
select(flights, contains("delay"))

select()函数,传递的参数:

  • starts_with(x,ignor.case = TRUE) # 采用为字符x起初的变量
  • ends_with(x,ignore.case = TRUE) # 采用坐字符x结尾的变量
  • contains(x,ignore.case = TRUE) #慎选具有包含x的变量
  • matches(x,ignore.case = TRUE) #挑选配合正则表达式的变量
  • num_range(“x”, 1:5, width = 2) #采纳从x01到x05的数值型变量
  • one_of(“x”, “y”, “z”) #选含在宣称变量中之变量
  • everything() #摘有变量,一般调整数据汇总变量顺序时行使

4.arrange–针对性数据的享有行排序

# arrange按给定的列名依次对行进行排序.
arrange(.data, ...)
arrange_(.data, ..., .dots)

  arrange
用于因变量排序,假诺排序依据(列)是字符,遵照字母表的逐条,假假使数字,默认按照自小到死的相继排序,假若用动用逆序排,可以动用desc(var)
或者 -var

> arrange(df, color)
##    color value
## 1 black     2
## 2 black     5
## 3  blue     1
## 4  blue     3
## 5  blue     4
> arrange(df, desc(value))
##    color value
## 1 black     5
## 2  blue     4
## 3  blue     3
## 4 black     2
## 5  blue     1

注意:大抵单排序依照直接把列名放在函数内,用逗号隔开;可以当排序中用总结,比如:

arrange(flights, date, hour, minute)
arrange(flights, desc(dep_delay - arr_delay))

5.mutate—添加新的变量

# mutate对已有列进行数据运算并添加为新列并保存已有列和新列
mutate(.data, ...)
mutate_(.data, ..., .dots)

  mutate
用于补充加新的变量,直接以列名举办测算得到新变量即可。而且其不行有特点地点是,可以用刚添加的变量,也即使是在一个言辞中不过因差不三只变量,而且变量可以来刚新建的变量。

> mutate(df, double = 2 * value, quadruple = 2 * double)
##    color value double quadruple
## 1  blue     1      2         4
## 2 black     2      4         8
## 3  blue     3      6        12
## 4  blue     4      8        16
## 5 black     5     10        20

6.summarise—数据集中

# summarise分类汇总Summarise multiple values to a single value
summarise(.data, ...)
summarise_(.data, ..., .dots)

  summarise
可以用来“分类集中”,但非是传统意义上的分类集中,它还会召开重新多。

  实际上它们是将咱现有的总体 data frame 按照分组按照(这里是
color)拆分成基本上个data frame,然后针对每个 data frame
分别总结,类似于ddply。

  使用更:分组按照可以四只,比如依照市、月份、年份,大家针对数码举行分类集中,可以博每个市各一样年每月的意况。

summarise 可以下的函数有

  • min(x), median(x), max(x), quantile(x, p),IQR()等总括量
  • n()重临观测个数, n_distinct()重临不同之考察个数, sum(x), mean(x)
  • sum(x > 10), mean(x > 10)
  • sd(x)标准差, var(x)方差, iqr(x), mad(x)
  • first()再次回到第一个着眼
  • last()再次回到最终一个观测
  • nth(x,n)返回第n个观测

    summarize(df,max(y))
    summarize(df,n())

    by_color <- group_by(df, color) # 分组依照summarise(by_color, total = sum(value)) # 分组求和

    Source: local data frame [2 x 2]

    color total

    1 black 7

    2 blue 8

7.rename—重命名变量

# rename 保留所有变量keeps all variables
rename(.data, ...)
rename_(.data, ..., .dots)

rename(tbl,newname = oldname,…)

示例:

rename(dftbl,x1 = x,y1 = y)
rename(iris, petal_length = Petal.Length)

8.group_by()—分组

上述函数已经坏有益于了, 不过当其和分组操作是概念结合起来时,
这才吃真正的强有力! 当对数据集通过 group_by()添加了分组音信后,mutate(), arrange()summarise()
函数会自动对这一个 tbl 类数据实施分组操作 (R语言泛型函数的优势).
group_by()函数指定tbl对象被之一个分组对象,再按照这么些分组对象开展分类汇总.

像: 对飞机航班数量据飞机编号 (TailNum) 举办分组, 总结该飞行器航班的次数
(count = n()), 平均飞行距离 (dist = mean(Distance, na.rm = TRUE)) 和
延时 (delay = mean(ArrDelay, na.rm = TRUE))

planes <- group_by(hflights_df, TailNum)
delay <- summarise(planes, 
  count = n(), 
  dist = mean(Distance, na.rm = TRUE), 
  delay = mean(ArrDelay, na.rm = TRUE))
delay <- filter(delay, count > 20, dist < 2000)

所以 ggplot2 包作个图观察一下, 发现飞机延时不延时以及飞距离没尽异常相关性:

ggplot(delay, aes(dist, delay)) + 
  geom_point(aes(size = count), alpha = 1/2) + 
  geom_smooth() + 
  scale_size_area()

9.join—数据集的连续

数据框中平日需要用大半只表明进行连接操作,如左连接、右连接、内接连等,这里dplyr包也供了数据集的连续操作。如下:

  • inner_join #内连接 包含x及y中很是的执行
  • left_join #左连接 突显所有x中同y中匹配的履,y中无雷同的赋NA
  • right_join #右连接
  • full_join #全连
  • semi_join # 再次回到可以和y表匹配的x表所有记录
  • anti_join # 重返无法同y表匹配的x表的所有记录

    x=data.frame(name=c(“John”,”Paul”,”George”,”Ringo”,”Stuart”,”Pete”),

             instrument= c("guitar","guitar","drums","bass","drums","bass"))
    

    y=data.frame(name=c(“John”,”Paul”,”George”,”Ringo”,”Brian”),

             band=c("TRUE","TRUE","TRUE","TRUE","FALSE"))
    

    View(x)
    View(y)

图片 4 
图片 5

View(left_join(x,y))  #把y表追加到x表后面

图片 6

View(inner_join(x,y)) 

图片 7

View(right_join(x,y))

图片 8

View(semi_join(x,y)) 

图片 9

View(anti_join(x,y)) 

图片 10

View(full_join(x,y)) 

图片 11

10.管道操作(%>% or %.%)

将达成一个函数的输出作为下一个函数的输入,%.%已弃

示例:

Batting数据集如下:

library(Lahman)
Batting %>%
  group_by(playerID) %>%
  summarise(total = sum(G)) %>%
  arrange(desc(total)) %>%
  View()

# 一种写法
head(arrange(summarise(group_by(Batting, playerID), total = sum(G)) , desc(total)), 5)
# 另一种写法
totals <- aggregate(. ~ playerID, data=Batting[,c("playerID","R")], sum)
ranks <- sort.list(-totals$R)
totals[ranks[1:5],]

11.dplyr连接mysql数据框

一经急需拿到MySQL数据库被之数码时,可以向来用dplyr包中的src_mysql()函数:

src_mysql(dbname,host = NULL,port = 0L,user = “root”,password = “password”,…) 

以身作则如下:

#dplyr连接mysql数据库
library(dplyr)
my_db <- src_mysql(dbname = "rmysql",
                   host = localhost,
                   port = 3306,
                   user = "rmysql",
                   password = "rmysql")
my_tbl <- tbl(my_db,from = "my_table") #my_table为数据库中的表

 

正文链接:http://www.cnblogs.com/homewch/p/5778402.html

 

网站地图xml地图