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閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380