dplyr 1.0 更新內(nèi)容大概記錄
最前面的話
2020/5/31
<br />
# devtools::install_github("tidyverse/dplyr")
library(tidyverse)
## 2020/5/31
## 可以通過(guò)以下了
install.packages("dplyr")
<a name="24239833"></a>
這次更新了什么呢?
<br />見(jiàn)官方鏈接 dplyr 1.0.0 , emm牡直,就不一一列舉了,反正進(jìn)行了大規(guī)模的更新纳决。<br />這里列舉幾個(gè)驚艷的功能:<br />
-
across()
:可以使我們對(duì)數(shù)據(jù)列進(jìn)行相同批量處理碰逸,目的用來(lái)盡可能的取代 apply()、do() 等函數(shù)阔加。
-
relocate()
: 更快捷的改變列的順序
-
rowwise
: 傳統(tǒng)的dplyr
中一般使針對(duì)列處理饵史,有了此函數(shù)后可以對(duì)數(shù)據(jù)進(jìn)行處理,比如對(duì)行求和胜榔、平均值胳喷,取代rowsum()
等函數(shù),常常與across()
函數(shù)連用夭织,吭露,能更好的能夠進(jìn)行批量處理。
<a name="ca996b56"></a>
還是翻譯一下吧尊惰,更好的了解一下:
<a name="e670ab3b"></a>
Breaking changes
-
bind_cols()
:當(dāng)輸入文件格式為data frame
格式時(shí)候奴饮,返回的是data frame
格式纬向,而非tibble
格式择浊。 -
bind_rows()戴卜、*_join()、summrise()琢岩、mutatte()
:有兩點(diǎn)主要的改變- 將因子和字符向量合并一起后不發(fā)出警告創(chuàng)造一個(gè)字符串向量投剥,之前合并的同時(shí)會(huì)發(fā)出警告
- 將多個(gè)因子合并后創(chuàng)造一個(gè)組合水平因子,之前是創(chuàng)造一個(gè)字符串向量同時(shí)會(huì)發(fā)出警告
-
bind_rows()
和其他使用向量修復(fù)向量名担孔,詳細(xì)見(jiàn)?vctrs::vec_as_names
-
all.equal.tbl_df()
被移除-
data frame
江锨、tibbles
、已分組的data frame
數(shù)據(jù)即使數(shù)據(jù)一模一樣也不再相等 -
data frame
數(shù)據(jù)是否相等不再忽略行排序糕篇、分組 -
expect_equal()
使用內(nèi)置的all.equal()
:比較data frame
時(shí)候啄育,以前正確的現(xiàn)在可能會(huì)出錯(cuò)
-
-
distinct()
:去重復(fù),保持原始的列順序 -
distinct()
:缺失列時(shí)會(huì)增加報(bào)錯(cuò)拌消,一直以來(lái)之前是只警告挑豌! -
group_modify()
:將分組變量列放置在最前面,類(lèi)似函數(shù)還有group_map()
墩崩、group_walk()
氓英,詳情見(jiàn)?group_modify()
-
n()、row_number()
:當(dāng)沒(méi)有加載dplyr
包時(shí)候鹦筹,不能直接使用了铝阐,現(xiàn)在使用dplyr::mutate(mtcars, x = n())
會(huì)報(bào)錯(cuò),必須得dplyr::mutate(mtcars, x = dplyr::n())
- 不再支持
grouped_df()
舊數(shù)據(jù)格式铐拐,可能會(huì)影響我們將數(shù)據(jù)存入本地徘键,比如使用knir
緩存或者使用saveRDS()
-
lead()、lag()
函數(shù)的輸入文件更加嚴(yán)格 - 拓展數(shù)據(jù)框需要首先添加一個(gè)或多個(gè)額外的類(lèi)遍蟋,而不是最后添加吹害。將額外的類(lèi)放在末尾會(huì)導(dǎo)致一些向量操作失敗,例如:
Input must be a vector, not a
<data.frame/...>object
-
right_join()
不再根據(jù)tibble
y 中的參數(shù)按照RHS
的順序?qū)Y(jié)果tibble
的行進(jìn)行排序
<a name="4078e029"></a>
New features
-
cur_*
系列函數(shù)cur_data()匿值、cur_group()赠制、cur_group_id()、cur_group_rows()
受data.table()
函數(shù)中的.SD挟憔、.GRP钟些、.BY、.I
啟發(fā)绊谭,能更方便的訪問(wèn)有關(guān)dplyr
“當(dāng)前”組的信息政恍。 -
row_*
系列函數(shù)rows_insert()、rows_update()达传、rows_upsert()篙耗、rows_patch()迫筑、rows_delete()
提供一個(gè)新的 API 來(lái)插入和刪除來(lái)自第二個(gè)數(shù)據(jù)框或表的行。
-
mutate()宗弯、summrise()
:如果返回一個(gè)數(shù)據(jù)框脯燃,可以從單個(gè)表達(dá)式創(chuàng)建多個(gè)列
-
select()、rename()
使用最新的tidyselect
接口蒙保;現(xiàn)在支持布爾邏輯運(yùn)算(例如:! & |
)辕棚,可以結(jié)合where()
函數(shù)按照類(lèi)型來(lái)進(jìn)行選擇列(比如:where(is.character)
(upgrade select() to new tidyselect )[https://github.com/tidyverse/dplyr/issues/4680]),還可以用來(lái)修復(fù)具有重復(fù)的列名的數(shù)據(jù)邓厕。 -
slice()
增加了以下幾個(gè)子函數(shù):-
slice_head()逝嚎、slice_tail()
:選擇第一列或者最后一列,類(lèi)似head()
和tail()
详恼,但是返回每一個(gè)組的行數(shù) -
slice_sample()
:隨機(jī)選擇行补君,接替sample_n()
和sample_frac()
-
slice_min()、slice_max()
:選擇最小值和最大值昧互,接替令人困惑的函數(shù)top_n()
-
-
summrise()
:增加參數(shù).groups =
以便于更好的控制分組 -
relocate()
:增加的新函數(shù)挽铁,更方便的調(diào)整數(shù)據(jù)列順序
-
rename_with()
:增加的新函數(shù),可以用函數(shù)來(lái)沖命名列名硅堆。
-
ungroup()
:可以選擇性的移除分組變量
-
pull()
:現(xiàn)在可以通過(guò)指定一個(gè)額外的列名返回指定的向量
<a name="59c5b601"></a>
Experimental features
-
mutate()
:僅適用于data frame
屿储,增加新參數(shù).before
和.after
可以控制新增加的列的位置
-
mutate()
:僅適用于data frame
, 增加了新參數(shù).kepp
參數(shù)可以控制保持?jǐn)?shù)據(jù).data
中哪些列,.kepp = "all"
默認(rèn);.keep = "none"
不保留輸入變量渐逃,類(lèi)似tranmute()
函數(shù)够掠;.keep = "used"
僅保留用于創(chuàng)建新列的變量。
morph() to automatically remove columns "used up" by a mutate()
-
with_groups()
:方便臨時(shí)分組或者取消分組
<a name="960ea0eb"></a>
across()
-
across()
:新增函數(shù)茄菊;能夠在函數(shù)summrise()疯潭、mutate()
和其他將一個(gè)函數(shù)(或一組函數(shù))應(yīng)用于選定的列的函數(shù),詳情見(jiàn)vignette("colwise")
-
c_across()
:新增函數(shù)面殖;同across()
函數(shù)竖哩,使得在行處理更加方便,比如:求每一行的平均值脊僚,見(jiàn)vignette("rowwise")
相叁。
<a name="ccb4fdd8"></a>
rowwise()
-
rowwise()
:允許指定在以下情況下應(yīng)保留在輸出中的其他變量 summarising 。所有操作都會(huì)保留按行順序
-
nest_by()
:它具有與group_by()
相同的接口辽幌,但會(huì)返回分組鍵的行數(shù)據(jù)框增淹,并以包含其余數(shù)據(jù)的數(shù)據(jù)框的列表列,即返回分組的列表乌企。
<a name="vctrs"></a>
vctrs
-
vctrs
:向量幫助文檔虑润,詳情見(jiàn)?vctrs
。簡(jiǎn)單記錄兩點(diǎn):- 舍棄了兩個(gè)最重要的依賴(lài):
Rcpp
和BH
- 處理數(shù)據(jù)框 data frame 數(shù)據(jù)時(shí)候保留行名
- 舍棄了兩個(gè)最重要的依賴(lài):
<a name="Grouping"></a>
Grouping
-
group_by()
使用來(lái)自包vctrs()
中的哈希算法 - 已分組的數(shù)據(jù)框現(xiàn)在可以通過(guò)
names<-加酵、[[<-拳喻、 [<- 哭当、$<-
來(lái)重新生成底層分組。 -
.grouped_df()
:重新分組
-
mutate()冗澈、summarise()
現(xiàn)在可以調(diào)整分組變量
-
group_modify()
新增了額外的參數(shù)
-
group_by()
:當(dāng)按drop = TRUE
的因子分組時(shí)钦勘,不創(chuàng)建任意的 NA 組
False positive implicit NA warning with factors and 0-row slices
<a name="ba5a9bcd"></a>
Lifecycle changes
- 不推薦使用 lifecycle
- 也就是說(shuō),默認(rèn)情況下渗柿,每個(gè)會(huì)話只會(huì)看到一次棄用警告个盆, 您可以使用
options(lifecycle_verbosity = x)
進(jìn)行控制,其中 x 是NULL, "quiet", "warning", and "error"
之一朵栖。
- 也就是說(shuō),默認(rèn)情況下渗柿,每個(gè)會(huì)話只會(huì)看到一次棄用警告个盆, 您可以使用
<a name="Removed"></a>
Removed
-
id()
函數(shù) -
failwith()
函數(shù) -
tbl_cube()
函數(shù) -
rbind_all()
函數(shù) -
rbind_list()
函數(shù) -
dr_dplyr()
函數(shù)
<a name="Deprecated"></a>
Deprecated
-
add_count()
函數(shù)中的drop
參數(shù) -
add_rownames
函數(shù)已經(jīng)被tibble::rownames_to_column()
取代 -
as.tbl() 和 tbl_df()
函數(shù)已經(jīng)被as_tibble()
取代 -
bench_tbls()、compare_tbls()柴梆、compare_tbls2()陨溅、eval_tbls() and eval_tbls2()
函數(shù)已棄用 -
combine()
函數(shù)已經(jīng)被vctrs::vec_c()
取代 -
funs()
函數(shù)已經(jīng)被list()
取代 -
group_by(add = )
已經(jīng)被group_by(.add = )
取代 -
group_by(.dots = )/group_by_prepare(.dots = )
已經(jīng)被!!!
取代
-
location() 和 changes()
函數(shù)已被lobstr::ref()
取代 -
src_loacl
函數(shù)已棄用 -
src_mysql()、 src_postgres()绍在、src_sqlite()
函數(shù)已棄用- 推薦使用
dbplyr
包:dbplyr门扇,自動(dòng)將數(shù)據(jù)轉(zhuǎn)變?yōu)?SQL
- 推薦使用
<a name="Superseded"></a>
Superseded
-
_if _at _all
等系列變體函數(shù)已經(jīng)被across()
函數(shù)取代。
-
rename_*()偿渡、select_*()
已經(jīng)被rename_with()
取代 -
do()
被summarise()
取代 -
top_n()
被slice_min()
和 slice_max()
取代
<a name="Questioning"></a>
Questioning
-
all_equal()
解決了一個(gè)似乎不再重要的問(wèn)題
<a name="Stable"></a>
Stable
-
rowwise()
is no longer questioning.
<a name="7dfebbeb"></a>
Documentation improvements
-
vignette("base)
簡(jiǎn)述了dplyr
與base R
的異同
[https://cran.r-project.org/web/packages/dplyr/vignettes/base.html](dplyr <-> base R)
-
vignette("grouping")
介紹了當(dāng)應(yīng)用于分組數(shù)據(jù)時(shí)候臼寄,dplyr 怎么變化的。
-
vignette("programming")
已經(jīng)完全重寫(xiě)溜宽,以反映最新的詞匯表吉拳、最新的rlang
特性和當(dāng)前的建議。現(xiàn)在用dplyr
編程應(yīng)該會(huì)簡(jiǎn)單很多适揉。
- 更多關(guān)于
dplyr
的幫助說(shuō)明書(shū)見(jiàn) dplyr/vignettes<br />
<a name="10cfcd06"></a>
Minor improvements and bug fixes
?dplyr_extending
-
dplyr
不再提供all.equal.tbl_df()
方法留攒。 coalesce()
-
distinct()
在處理不存在的變量時(shí)候會(huì)報(bào)錯(cuò),之前是警告 -
filter()嫉嘀、mutate()炼邀、summarise()
提供了更詳細(xì)的報(bào)錯(cuò)信息 - 當(dāng)所有列均為邏輯向量時(shí),
filter()
處理數(shù)據(jù)框結(jié)果通過(guò)用&
減少它們剪侮。意味著我們可以結(jié)合across
與filter()
函數(shù)
-
left_join()拭宁、right_join()、full_join()
增加了新參數(shù)kepp
瓣俯,可以選擇保留這兩組連接鍵杰标。當(dāng)我們想要確定哪一行在每一個(gè)數(shù)據(jù)丟失時(shí)非常有用。
-
*join()
函數(shù)增加了by = character()
來(lái)進(jìn)行數(shù)據(jù)合并
[https://github.com/tidyverse/dplyr/issues/4206](Problems writing cross-join in dplyr)
-
group_by(..., .add = TRUE)
取代了group_by(..., add = TRUE)