而不是编写和读取数据框来填充此方法中的所有空因子,
na.strings=c("","NA")
我想将一个函数应用于所有列,并用NA替换空。到目前为止,我已经选择了因子列,但不知道下一步该做什么。
df %>% select_if(is.factor) %>% ....
我怎样才能做到这一点,最好是使用dplyr和/或应用方法
答案 0 :(得分:8)
我们可以使用mutate_if
df <- df %>%
mutate_if(is.factor, funs(factor(replace(., .=="", NA))))
使用dplyr 0.8.0
,我们也可以
df %>%
mutate_if(is.factor, na_if, y = "")
或更改funs
(评论中提到的@Frederick已弃用list
)
df %>%
mutate_if(is.factor, list(~ na_if(., "")))
或者使用base R
我们可以将特定的levels
分配给NA
j1 <- sapply(df, is.factor)
df[j1] <- lapply(df[j1], function(x) {is.na(x) <- levels(x)==""; x})
df <- data.frame(col1 = c("", "A", "B", ""), col2 = c("A", "", "", "C"),
col3 = 1:4)