这种方法不是通过编写和读取数据框来填充所有空因子的。
na.strings=c("","NA")
我希望能够对所有列应用一个函数,并将空值替换为NA。目前我已经选择了因子列,但不知道该怎么做下一步。
df %>% select_if(is.factor) %>% ....
我应该如何做到这一点,最好使用dplyr和/或apply方法进行处理。
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(., "")))
或者使用基本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)
na_if
来使它更短。 - akrun
df %>% mutate_if(is.factor, na_if, '')
- alistairedf %>% mutate_if(is.factor, na_if, y='')
才能使其正常工作。 - thelatemail