dplyr 1.0 更新内容大概记录

dplyr 1.0 更新内容大概记录

最前面的话

2020/5/31

image.png
image.png

<br />


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

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

<a name="24239833"></a>

这次更新了什么呢?

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

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

dplyr 1.0.0: working across columns

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

dplyr 1.0.0: select, rename, relocate

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

rowwise

<a name="ca996b56"></a>

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

<a name="e670ab3b"></a>

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 a<data.frame/...>object
  • right_join() 不再根据 tibble y 中的参数按照 RHS 的顺序对结果 tibble 的行进行排序

<a name="4078e029"></a>

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

<a name="59c5b601"></a>

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

<a name="960ea0eb"></a>

across()

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

<a name="ccb4fdd8"></a>

rowwise()

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

Broadly consider do() and rowwise()

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

<a name="vctrs"></a>

vctrs

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

<a name="Grouping"></a>

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

<a name="ba5a9bcd"></a>

Lifecycle changes

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

<a name="Removed"></a>

Removed

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

<a name="Deprecated"></a>

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

<a name="Superseded"></a>

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

<a name="Questioning"></a>

Questioning

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

<a name="Stable"></a>

Stable

  • rowwise() is no longer questioning.

<a name="7dfebbeb"></a>

Documentation improvements

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

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

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

Grouped data

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

Programming with dplyr

<a name="10cfcd06"></a>

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)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335