dplyr 1.0 更新内容大概记录
最前面的话
2020/5/31

<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() 等函数。
-
relocate(): 更快捷的改变列的顺序
-
rowwise: 传统的dplyr中一般使针对列处理,有了此函数后可以对数据进行处理,比如对行求和、平均值,取代rowsum()等函数,常常与across()函数连用,,能更好的能够进行批量处理。
<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 frame、tibbles、已分组的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()不再根据tibbley 中的参数按照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 来插入和删除来自第二个数据框或表的行。
-
mutate()、summrise():如果返回一个数据框,可以从单个表达式创建多个列
-
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():增加的新函数,更方便的调整数据列顺序
-
rename_with():增加的新函数,可以用函数来冲命名列名。
-
ungroup():可以选择性的移除分组变量
-
pull():现在可以通过指定一个额外的列名返回指定的向量
<a name="59c5b601"></a>
Experimental features
-
mutate():仅适用于data frame,增加新参数.before和.after可以控制新增加的列的位置
-
mutate():仅适用于data frame, 增加了新参数.kepp参数可以控制保持数据.data中哪些列,.kepp = "all"默认;.keep = "none"不保留输入变量,类似tranmute()函数;.keep = "used"仅保留用于创建新列的变量。
morph() to automatically remove columns "used up" by a mutate()
-
with_groups():方便临时分组或者取消分组
<a name="960ea0eb"></a>
across()
-
across():新增函数;能够在函数summrise()、mutate()和其他将一个函数(或一组函数)应用于选定的列的函数,详情见vignette("colwise") -
c_across():新增函数;同across()函数,使得在行处理更加方便,比如:求每一行的平均值,见vignette("rowwise")。
<a name="ccb4fdd8"></a>
rowwise()
-
rowwise():允许指定在以下情况下应保留在输出中的其他变量 summarising 。所有操作都会保留按行顺序
-
nest_by():它具有与group_by()相同的接口,但会返回分组键的行数据框,并以包含其余数据的数据框的列表列,即返回分组的列表。
<a name="vctrs"></a>
vctrs
-
vctrs:向量帮助文档,详情见?vctrs。简单记录两点:- 舍弃了两个最重要的依赖:
Rcpp和BH - 处理数据框 data frame 数据时候保留行名
- 舍弃了两个最重要的依赖:
<a name="Grouping"></a>
Grouping
-
group_by()使用来自包vctrs()中的哈希算法 - 已分组的数据框现在可以通过
names<-、[[<-、 [<- 、$<-来重新生成底层分组。 -
.grouped_df():重新分组
-
mutate()、summarise()现在可以调整分组变量
-
group_modify()新增了额外的参数
-
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 = )已经被!!!取代
-
location() 和 changes()函数已被lobstr::ref()取代 -
src_loacl函数已弃用 -
src_mysql()、 src_postgres()、src_sqlite()函数已弃用- 推荐使用
dbplyr包:dbplyr,自动将数据转变为SQL
- 推荐使用
<a name="Superseded"></a>
Superseded
-
_if _at _all等系列变体函数已经被across()函数取代。
-
rename_*()、select_*()已经被rename_with()取代 -
do()被summarise()取代 -
top_n()被slice_min()和 slice_max()取代
<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)简述了dplyr与base R的异同
[https://cran.r-project.org/web/packages/dplyr/vignettes/base.html](dplyr <-> base R)
-
vignette("grouping")介绍了当应用于分组数据时候,dplyr 怎么变化的。
-
vignette("programming")已经完全重写,以反映最新的词汇表、最新的rlang特性和当前的建议。现在用dplyr编程应该会简单很多。
- 更多关于
dplyr的帮助说明书见 dplyr/vignettes<br />
<a name="10cfcd06"></a>
Minor improvements and bug fixes
?dplyr_extending-
dplyr不再提供all.equal.tbl_df()方法。 coalesce()
-
distinct()在处理不存在的变量时候会报错,之前是警告 -
filter()、mutate()、summarise()提供了更详细的报错信息 - 当所有列均为逻辑向量时,
filter()处理数据框结果通过用&减少它们。意味着我们可以结合across与filter()函数
-
left_join()、right_join()、full_join()增加了新参数kepp,可以选择保留这两组连接键。当我们想要确定哪一行在每一个数据丢失时非常有用。
-
*join()函数增加了by = character()来进行数据合并
[https://github.com/tidyverse/dplyr/issues/4206](Problems writing cross-join in dplyr)
-
group_by(..., .add = TRUE)取代了group_by(..., add = TRUE)


