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

时间:2017-03-28 02:58:20

标签: r dplyr

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

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

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

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

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

1 个答案:

答案 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)