[英]How to use mutate_at or mutate_if at the same time to do multiple action on data
我想使用一個代碼對數據中的相同變量應用3個函數。 我有一個數據集,我的數據中有某些列,我想將這些功能應用於所有這些列。 1-使它們成為所有因子數據2-用缺失值替換列中的空格(將空間值轉換為缺失值)3-使用fct_explicit_na給缺失值明確的因子水平
我已經在單獨的代碼行中完成了此操作,但是我想使用dplyr mutate函數合並所有這些代碼。 我嘗試了以下內容,但沒有工作
cols <- c("id12", "id13", "id14", "id15")
data_new <- data_old %>%
mutate_if(cols=="", NA) %>% # replace space with NA for cols
mutate_at(cols, factor) %>% # then turn them into factors
mutate_at(cols, fct_explicit_na) # give NAs explicit factor level
)
我收到錯誤消息: tbl_if_vars(.tbl,.p,.env,...,。include_group_vars = .include_group_vars)中的錯誤:length(.p)== length(tibble_vars)不正確
mutate_if
步驟未執行OP打算執行的操作。 相反,我們可以一步完成
library(dplyr)
data_old %>%
mutate_at(vars(cols), ~ na_if(., "") %>%
factor %>%
fct_explicit_na)
為什么OP的代碼不起作用?
使用可重現的示例,下面的代碼將factor
列轉換為character
類
iris1 <- iris %>%
mutate_if(is.factor, as.character) %>%
mutate(Species = replace(Species, c(1, 3, 5), ""))
現在,如果我們這樣做
iris1 %>%
mutate_if("Species" == "", NA)
它正在比較兩個字符串,而不是檢查列值。 同樣, mutate_if
應該返回一個length
1的邏輯向量以選擇該列。
相反,如果我們使用
iris1 %>%
mutate_if(~ any(. == ""), ~ na_if(., "")) %>%
head
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.