R语言dplyr包的学习

dplyr包可以看作是plyr包的一个扩展,主要是针对数据框的数据操作。

在使用dplyr包中的函数对数据框进行操作之间,最好将其转换为tbl对象:tbl_df()

一个很好的效果是,tbl对象可以根据显示空间大小来进行部分显示。

利用dplyr包常见的数据操作可归纳为以下5种:

1. 筛选 filter()

按给定的逻辑判断筛选出符合要求的子数据集, 返回符合条件的子数据集的行。类似于 base::subset() 函数

 filter(.data, …)  .data为数据集,…为逻辑判断条件,多个参数条件相当于and连接

此外,… 还有一些特殊用法:

==,>,>= 等
&,|,!,xor()
is.na(),colname %in% c(“factor1″,”factor2”)
between(),near()

2. 排列 arrange()

按给定的列名依次对行进行排序.这个函数和 plyr::arrange() 是一样的, 类似于 order()

  arrange(.data, …)  … 一串逗号分割无引号的列名。默认升序,可利用desc()进行降序

3. 选择 select()

用列名作参数来选择子数据集,类似于R自带的 subset() 函数

  select(.data, …)  …是无引号一系列的以逗号分割的表达式。可以是列名

此外,… 还有一些特殊用法:

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() #选择所有变量,一般调整数据集中变量顺序时使用 
 –  #排除列名
:  #mpg : disp也就相当于2:4,选择从mpg到disp的所有列

另外,select还可用于改列名

 select(iris, petal_length = Petal.Length) 

相当于 rename(iris, petal_length = Petal.Length) 

只是,select返回的是所选中的列,而rename返回的是所有列。

4. 扩展 mutate()

对已有列进行数据运算并添加为新列,并保留原始变量。作用与 plyr::mutate() 相同, 与base::transform() 相似, 优势在于可以在同一语句中对刚增加的列进行操作。而同样操作用R自带函数 transform() 的话就会报错

  mutate(.data, …)   … 名字-值的成对表达式,利用colname=NULL扔掉变量

 此外,… 还有一些特殊用法:

+,- 等
log()
lead(),lag()
dense_rank(), min_rank(), percent_rank(), row_number(), cume_dist(), ntile()
cumsum(), cummean(), cummin(), cummax(), cumany(), cumall()
na_if(), coalesce()
if_else(), recode(), case_when()

另注意:mutate添加新变量并保留原变量;而transmute扔掉原始变量。

同时与之比较相关的函数有mutate_all(),mutate_at(),mutate_if()

类似的有:transmute_all(),transmute_at(),mutate_if()

summarise_all(),summarise_at(),summarise_if()

group_by_all(),group_by_at(),group_by_if()

5. 汇总 summarise()

对数据框调用其它函数进行汇总操作, 返回一维的结果,等同于 plyr::summarise(),

  summarise(.data, …)   … 名字-值的表达式,值是汇总函数

此外, … 还有一些特殊用法:

Center: mean(), median()
Spread: sd(), IQR(), mad()
Range: min(), max(), quantile()
Position: first(), last(), nth(),
Count: n(), n_distinct()
Logical: any(), all()

其实,summarise()常被用于汇总经group_by后的分组数据,并且每个组输出一行

分组操作 group_by()

 根据某些变量进行分组。

 group_by(.data, …, add = FALSE)  … 用于分组的变量,add=false,覆盖现有组,true在现有组基础上添加

与之对应的还有,去除分组ungroup(x,…)

Published by

风君子

独自遨游何稽首 揭天掀地慰生平