dplyr包實用總結之mutate系列


dplyr包實用總結之mutate系列

mutate系列

mutate_if

mutate_if():轉換由謂詞函數(一個判斷式,一個返回bool值的函數或者仿函數)選擇的特定列

謂詞函數,也叫判斷函數(predicate function)

mutate_if()轉換數據類型,挺方便的

# 將所有因子列轉化成字符
my_data %>% mutate_if(is.factor, as.character)
# 將左右數字列四舍五入
my_data %>% mutate_if(is.numeric, round, digits = 0)	

mutate_if()應用於多個轉換(Multiple transformations)

此時需要通過函數的list來傳遞,會創建新的變量名,一般是在需要修改的變量后加 _函數名的字樣

scale2 <- function(x, na.rm = FALSE) (x - mean(x, na.rm = na.rm)) / sd(x, na.rm)
iris %>% mutate_if(is.numeric, list(scale2, log))

如果list里只有一個函數,它會直接修改已經存在的變量(in place),這時可以給它一個新的變量名則創建新的變量

iris %>% mutate_if(is.numeric, list(scale2))
iris %>% mutate_if(is.numeric, list(scale = scale2))

當然也可以使用purrr-style的公式

iris %>% mutate_if(is.numeric, list(~scale2(.), ~log(.)))

如果新的變量名也能修改,特別是與原變量會重合的時候

iris %>% mutate_if(is.numeric, list(scale = scale2, log = log))

mutate_at

將函數應用於使用字符向量選擇的特定列

starwars %>% mutate_at(c("height", "mass"), scale2)

傳遞額外的參數

starwars %>% mutate_at(c("height", "mass"), scale2, na.rm = TRUE)

使用purrr-style

starwars %>% mutate_at(c("height", "mass"), ~scale2(., na.rm = TRUE))

可以在選擇變量的時候,使用一下簡單幫助函數來篩選,不過要記得使用vars(),vars()作用是選擇變量。

iris %>% mutate_at(vars(matches("Sepal")), log)

其他常用的小函數

組裝

bind_rows()

bind_cols() :將多個data frame合成單個data frame

data_frame() : 將一系列列向量組合成data frame

as_data_frame() :將list轉換成data frame


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM