dplyr需要掌握的6个函数

dplyr是我十分喜欢的包,这里面需要掌握的函数并不多,但是很有用。

数据集介绍

这次我们使用R语言内置的数据集iris来示范
鸢尾花(iris)是数据挖掘常用到的一个数据集
这个数据集150行,5列

该数据包含150种鸢尾花的信息 每50种取自三个鸢尾花种之一(setosa,versicolour或virginica)
每个花的特征用下面的5种属性描述

  • 萼片长度(Sepal.Length)
  • 萼片宽度(Sepal.Width)
  • 花瓣长度(Petal.Length)
  • 花瓣宽度(Petal.Width)

类(Species):

  • Iris Setosa(山鸢尾)
  • Iris Versicolour(杂色鸢尾)
  • Iris Virginica(维吉尼亚鸢尾

本次介绍6个函数
首先需要加载R包

library(dplyr)

前面select和mutate都是对列的操作

1.select 选择列

select()函数的使用: 筛选的是列
最普通最常用的的方法,
按照列名筛选列,
比如只筛选Petal.Length,Petal.Width两个变量

df_select <- select(iris, Petal.Length, Petal.Width)
head(df_select)

可结合以下辅助函数实现更方便的列选择

  • starts_with,
  • ends_with,
  • contains,
  • matches,
  • one_of,
  • everything

选择变量名称以Petal开头的列

df_select_1 <- select(iris, starts_with("Petal"))
head(df_select_1)

选择变量名称以Width结尾的变量

df_select_2 <- select(iris, ends_with("Width"))
head(df_select_2)

选择变量名称包含etal的变量

df_select_3 <- select(iris, contains("etal"))
head(df_select_3)

选择变量名称匹配t的变量

df_select_4 <- select(iris, matches(".t."))
head(df_select_4)

筛选所有的变量

df_select_5 <- select(iris, everything())
head(df_select_5)

把需要的变量赋值给vars,然后用one_of模式筛选

vars <- c("Petal.Length", "Petal.Width")
df_select_6 <- select(iris, one_of(vars))
head(df_select_6)

2.mutate 增加列

mutate()函数的使用,新增列
注意他不仅仅可以随意增加列,还可以对已有列数据变换并添加为新的列,
举例子,添加一个新的列new,并且new是Sepal.Length和Sepal.Width的乘积

df_mutate <- mutate(iris, new = Sepal.Length * Sepal.Width)
head(df_mutate)

3.filter 选择行

filter()函数的使用 筛选的是行
按照已定条件对行做过滤,类似标准函数subset,
需要注意的是,可以添加多个标准,多个标准之间以逗号隔开,
举例子,筛选Species是setosa的数据

df_filter_1 <- filter(iris, Species == "setosa")
head(df_filter_1)

筛选Sepal.Length大于5,并且Species是setosa的数据,
多个标准之间以逗号隔开

df_filter_2 <- filter(iris, Sepal.Length > 5,Species == "setosa")
head(df_filter_2)

筛选Sepal.Length大于5,并且Species包含在c("setosa","versicolor")中的数据

df_filter_3 <- filter(iris, Sepal.Length > 5, Species %in% c("setosa","versicolor"))
head(df_filter_3)

4.arrange 行排序

arrange()函数的使用
#对数据进行排序,类似标准函数order:
按照Sepal.Length从小到大排序

df_arrange_1 <- arrange(iris, Sepal.Length)
head(df_arrange_1)

双变量排序,多个标准之间以逗号隔开
按照Sepal.Length从小到达,并且按照Sepal.Width从大到小排序
desc()表示从大到小

df_arrange_2 <- arrange(iris, Sepal.Length, desc(Sepal.Width))
head(df_arrange_2)

5.distinct 行去重

distinct()函数的使用, 他的作用是以某个列为指标来把去重行,
用法如下

distinct(.data, ..., .keep_all = FALSE)

data就是我们的数据框,三个点的地方填入的是要去重的指标,一般是列名,.keep_all 这个参数指定的是,其余列是否需要保留
我们举个例子来说明一下
我们以Species为指标来去重,因为他只包含三个分类,所以最终只有三个元素留下,此时把.keep_all = F,那么其他列就会被去掉,
只剩下Species这一列

test <- distinct(iris,Species,.keep_all = F)
> test
     Species
1     setosa
2 versicolor
3  virginica

如果把.keep_all = T,那么其他列就会被保留,

test <- distinct(iris,Species,.keep_all = T)

最终数据中其他列也会有的

> test
  Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
1          5.1         3.5          1.4         0.2     setosa
2          7.0         3.2          4.7         1.4 versicolor
3          6.3         3.3          6.0         2.5  virginica

这个特性常被用来探针去重。

6.inner_join

这个跟merge的功能一样,

7.管道符号

把上一个步的结果变成下一步的输入,并且占据了第一个参数的位置。