R dplyr方法用NA替换所有空因子

问题描述 投票:5回答:1

而不是编写和读取数据框来填充此方法中的所有空因子,

na.strings=c("","NA")

我想将一个函数应用于所有列,并用NA替换空。到目前为止,我已经选择了因子列,但不知道下一步该做什么。

df %>% select_if(is.factor) %>% ....

我怎样才能做到这一点,最好使用dplyr和/或apply方法

r dplyr
1个回答
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})

data

df <- data.frame(col1 = c("", "A", "B", ""), col2 = c("A", "", "", "C"),
         col3 = 1:4)
© www.soinside.com 2019 - 2024. All rights reserved.