dplyr-mutate-across 選擇多列應(yīng)用函數(shù)示例

mutateacross()配合可用于在dplyr數(shù)據(jù)處理管道(%>%)中方便地選擇多列進(jìn)行相應(yīng)的函數(shù)處理,從而避免了數(shù)據(jù)處理過程中管道外使用lapply或循環(huán)結(jié)構(gòu),有效保證代碼的整潔統(tǒng)一。

mutate() 的主要功能是創(chuàng)建新列,而且一旦創(chuàng)建就可以立即在管道符使用。
across(.cols = , .fns = )函數(shù)常用的只有兩個(gè)參數(shù),.cols = 和 .fns = 分別指定選取用于遍歷的列變量 和 處理函數(shù)。

指定列向量轉(zhuǎn)換 向量類型

df %>% mutate(across(.cols = c(x, y, z), .fns = as.character)) #將x, y, z三列轉(zhuǎn)換為字符型向量
df %>% mutate(across(.cols = 1:3, .fns = as.character) )  #改變1:3列的向量元素類型為字符型
df %>% mutate(across(.cols = everything(), .fns = as.character))   #將所有列轉(zhuǎn)換為字符型向量
str(df) #查看數(shù)據(jù)框列向量類型

將所有字符型的列向量轉(zhuǎn)換為數(shù)值型

df %>% mutate(across(where(is.character), as.numeric, .names = '{.col}.2')) ## .names 參數(shù)指定新新列名,{.col}代表舊列的列名

數(shù)據(jù)表中單元值的替換

df %>% mutate(across(across(everything(), ~replace(.x, .x ==  "replacement" , "parttern")))

使用across()隱函數(shù)處理列向量

注: ~是R語言隱函數(shù)[lambda]的寫法,翻譯為代表function(x){...}; 而 .x 或 .則是指向當(dāng)前被遍歷的列向量。

df %>% mutate(across(everything(),~ scale(.),.names = '{.col}.scale')) #對(duì)列向量進(jìn)行中心化

df %>%  drop_na() %>%  mutate( across(where(is.numeric), log) ) #對(duì)數(shù)化

df %>% mutate(across(c(x,y), ~quantile(.,0.95,na.rm = TRUE), .names = '{.col}_quantitle') )  #計(jì)算列向量0.95分位數(shù)

df %>% mutate(across(everything(),~ .x / sum(.x, na.rm = TRUE)))  #計(jì)算列向量值百分比

替換y列小于0的值為NA

df %>%  mutate( across(contains("y"), ~ if_else(.x < 0, NA_real_, .x)) )

參考材料:
Why I love dplyr's across - Will Hipson
第 40 章 tidyverse中的across()之美1 | 數(shù)據(jù)科學(xué)中的 R 語言 (bookdown.org)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容