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.管道符号
把上一个步的结果变成下一步的输入,并且占据了第一个参数的位置。