本文主要介绍利用dplyr包常见的数据操作:filter(),arrange(),select(),mutate(),summarise(),group_by()等

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

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

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

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

1. 筛选 filter()

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

filter(.data, ...)

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

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

2. 排列 arrange()

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

arrange(.data, ...)

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, ...)

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

  • +,- 等
  • 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)

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