dplyr 1.0 更新内容大概记录

dplyr 1.0 更新内容大概记录

最前面的话

2020/5/31

image.png
image.png



# devtools::install_github("tidyverse/dplyr")
library(tidyverse)

## 2020/5/31
## 可以通过以下了
install.packages("dplyr")

这次更新了什么呢?


见官方链接 dplyr 1.0.0 , emm,就不一一列举了,反正进行了大规模的更新。
这里列举几个惊艳的功能:

  • across():可以使我们对数据列进行相同批量处理,目的用来尽可能的取代 apply()、do() 等函数。

dplyr 1.0.0: working across columns

  • relocate(): 更快捷的改变列的顺序

dplyr 1.0.0: select, rename, relocate

  • rowwise: 传统的 dplyr 中一般使针对列处理,有了此函数后可以对数据进行处理,比如对行求和、平均值,取代 rowsum() 等函数,常常与 across() 函数连用,,能更好的能够进行批量处理。

rowwise

还是翻译一下吧,更好的了解一下:

Breaking changes

  • bind_cols():当输入文件格式为 data frame 格式时候,返回的是 data frame 格式,而非 tibble 格式。
  • bind_rows()、*_join()、summrise()、mutatte():有两点主要的改变
    • 将因子和字符向量合并一起后不发出警告创造一个字符串向量,之前合并的同时会发出警告
    • 将多个因子合并后创造一个组合水平因子,之前是创造一个字符串向量同时会发出警告
  • bind_rows() 和其他使用向量修复向量名,详细见 ?vctrs::vec_as_names
  • all.equal.tbl_df() 被移除
    • data frametibbles、已分组的 data frame 数据即使数据一模一样也不再相等
    • data frame 数据是否相等不再忽略行排序、分组
    • expect_equal() 使用内置的 all.equal():比较 data frame 时候,以前正确的现在可能会出错
  • distinct():去重复,保持原始的列顺序
  • distinct():缺失列时会增加报错,一直以来之前是只警告!
  • group_modify():将分组变量列放置在最前面,类似函数还有 group_map()group_walk(),详情见 ?group_modify()
  • n()、row_number():当没有加载 dplyr 包时候,不能直接使用了,现在使用 dplyr::mutate(mtcars, x = n()) 会报错,必须得 dplyr::mutate(mtcars, x = dplyr::n())
  • 不再支持 grouped_df() 旧数据格式,可能会影响我们将数据存入本地,比如使用 knir 缓存或者使用 saveRDS()
  • lead()、lag() 函数的输入文件更加严格
  • 拓展数据框需要首先添加一个或多个额外的类,而不是最后添加。将额外的类放在末尾会导致一些向量操作失败,例如: Input must be a vector, not aobject
  • right_join() 不再根据 tibble y 中的参数按照 RHS 的顺序对结果 tibble 的行进行排序

New features

  • cur_* 系列函数 cur_data()、cur_group()、cur_group_id()、cur_group_rows()data.table() 函数中的 .SD、.GRP、.BY、.I 启发,能更方便的访问有关 dplyr “当前”组的信息。
  • row_* 系列函数 rows_insert()、rows_update()、rows_upsert()、rows_patch()、rows_delete() 提供一个新的 API 来插入和删除来自第二个数据框或表的行。

Consider new row mutation functions

  • mutate()、summrise() :如果返回一个数据框,可以从单个表达式创建多个列

Automatically unpack unnamed df-cols

  • select()、rename() 使用最新的 tidyselect 接口;现在支持布尔逻辑运算(例如:! & |),可以结合 where() 函数按照类型来进行选择列(比如:where(is.character)(upgrade select() to new tidyselect )[https://github.com/tidyverse/dplyr/issues/4680]),还可以用来修复具有重复的列名的数据。
  • slice() 增加了以下几个子函数:
    • slice_head()、slice_tail():选择第一列或者最后一列,类似 head()tail(),但是返回每一个组的行数
    • slice_sample():随机选择行,接替 sample_n()sample_frac()
    • slice_min()、slice_max():选择最小值和最大值,接替令人困惑的函数 top_n()
  • summrise():增加参数 .groups = 以便于更好的控制分组
  • relocate():增加的新函数,更方便的调整数据列顺序

A dedicated verb to move columns within a table

  • rename_with():增加的新函数,可以用函数来冲命名列名。

Need equivalent of scoped select/rename helpers

  • ungroup():可以选择性的移除分组变量

Allow ungroup to specify removal of grouping variable

  • pull():现在可以通过指定一个额外的列名返回指定的向量

pull() can also return named vectors

Experimental features

  • mutate():仅适用于 data frame,增加新参数 .before.after 可以控制新增加的列的位置

Allow mutate() to choose the position of new columns

  • mutate():仅适用于 data frame, 增加了新参数 .kepp 参数可以控制保持数据 .data 中哪些列,.kepp = "all" 默认; .keep = "none" 不保留输入变量,类似 tranmute() 函数;.keep = "used" 仅保留用于创建新列的变量。

morph() to automatically remove columns "used up" by a mutate()

  • with_groups():方便临时分组或者取消分组

Syntax for temporary grouping

across()

  • across():新增函数;能够在函数 summrise()、mutate() 和其他将一个函数(或一组函数)应用于选定的列的函数,详情见 vignette("colwise")
  • c_across():新增函数;同 across() 函数,使得在行处理更加方便,比如:求每一行的平均值,见 vignette("rowwise")

rowwise()

  • rowwise():允许指定在以下情况下应保留在输出中的其他变量 summarising 。所有操作都会保留按行顺序

Broadly consider do() and rowwise()

  • nest_by():它具有与 group_by()相同的接口,但会返回分组键的行数据框,并以包含其余数据的数据框的列表列,即返回分组的列表。

vctrs

  • vctrs:向量帮助文档,详情见 ?vctrs。简单记录两点:
    • 舍弃了两个最重要的依赖:RcppBH
    • 处理数据框 data frame 数据时候保留行名

Grouping

  • group_by() 使用来自包 vctrs() 中的哈希算法
  • 已分组的数据框现在可以通过 names<-、[[<-、 [<- 、$<- 来重新生成底层分组。
  • .grouped_df():重新分组

[Add method for grouped_df

  • mutate()、summarise() 现在可以调整分组变量

mutate() should allow modification of grouping variables

  • group_modify() 新增了额外的参数

Can't pass additional arguments to group_modify() function

  • group_by():当按 drop = TRUE 的因子分组时,不创建任意的 NA 组

False positive implicit NA warning with factors and 0-row slices

Lifecycle changes

  • 不推荐使用 lifecycle
    • 也就是说,默认情况下,每个会话只会看到一次弃用警告, 您可以使用 options(lifecycle_verbosity = x) 进行控制,其中 x 是 NULL, "quiet", "warning", and "error" 之一。

Removed

  • id() 函数
  • failwith() 函数
  • tbl_cube() 函数
  • rbind_all() 函数
  • rbind_list() 函数
  • dr_dplyr() 函数

Deprecated

  • add_count() 函数中的 drop 参数
  • add_rownames 函数已经被 tibble::rownames_to_column() 取代
  • as.tbl() 和 tbl_df() 函数已经被 as_tibble() 取代
  • bench_tbls()、compare_tbls()、compare_tbls2()、eval_tbls() and eval_tbls2() 函数已弃用
  • combine() 函数已经被 vctrs::vec_c() 取代
  • funs() 函数已经被 list() 取代
  • group_by(add = ) 已经被 group_by(.add = ) 取代
  • group_by(.dots = )/group_by_prepare(.dots = ) 已经被 !!! 取代

group_by(.dots) handling - breaking change?

  • location() 和 changes() 函数已被 lobstr::ref() 取代
  • src_loacl 函数已弃用
  • src_mysql()、 src_postgres()、src_sqlite() 函数已弃用
    • 推荐使用 dbplyr 包:dbplyr,自动将数据转变为 SQL

Superseded

  • _if _at _all 等系列变体函数已经被 across() 函数取代。

Mark scoped helpers as superseded

  • rename_*()、select_*() 已经被 rename_with() 取代
  • do()summarise() 取代
  • top_n()slice_min() 和 slice_max() 取代

top_n(df, n) returns bottom n rows

Questioning

  • all_equal() 解决了一个似乎不再重要的问题

Stable

  • rowwise() is no longer questioning.

Documentation improvements

  • vignette("base) 简述了 dplyrbase R 的异同

[https://cran.r-project.org/web/packages/dplyr/vignettes/base.html](dplyr <-> base R)

dplyr 1.0 更新内容大概记录_第1张图片

  • vignette("grouping") 介绍了当应用于分组数据时候,dplyr 怎么变化的。

Grouped data

  • vignette("programming")已经完全重写,以反映最新的词汇表、最新的 rlang 特性和当前的建议。现在用 dplyr 编程应该会简单很多。

Programming with dplyr

  • 更多关于 dplyr 的帮助说明书见 dplyr/vignettes

    dplyr 1.0 更新内容大概记录_第2张图片

Minor improvements and bug fixes

  • ?dplyr_extending
  • dplyr 不再提供 all.equal.tbl_df() 方法。
  • coalesce()

df_patch (via coalesce) is too picky about types

  • distinct() 在处理不存在的变量时候会报错,之前是警告
  • filter()、mutate()、summarise() 提供了更详细的报错信息
  • 当所有列均为逻辑向量时,filter() 处理数据框结果通过用 减少它们。意味着我们可以结合 acrossfilter() 函数

filter() and data frame results, filter(across())

  • left_join()、right_join()、full_join() 增加了新参数 kepp ,可以选择保留这两组连接键。当我们想要确定哪一行在每一个数据丢失时非常有用。

outer joins don't keep join columns from both sides

  • *join() 函数增加了 by = character() 来进行数据合并

[https://github.com/tidyverse/dplyr/issues/4206](Problems writing cross-join in dplyr)

  • group_by(..., .add = TRUE) 取代了 group_by(..., add = TRUE)

你可能感兴趣的:(dplyr 1.0 更新内容大概记录)