我有一个数据集,其中一些缺少的值编码为-99,并尝试使用naniar函数replace_with_na_all将这些值替换为NA。该函数可以执行此操作,但是它似乎也将我的因子变量转换为整数,从而丢失了因子的名称。
无论因子本身是否已经有一些真实的(NA)缺失值,都会发生这种情况,您可以在下面的示例中看到(在tibble1中,因子从一开始就具有缺失值,在tibble2中则没有)。 / p>
library(tidyverse)
library(naniar)
# Example factor with missing values
tibble1 <- tribble(
~x, ~y,
"a", 1,
-99, 2,
"c", -99
)
tibble1$x <- as.factor(tibble1$x)
levels(tibble1$x) <- list("A" = "a",
"C" = "c")
# Showing original tibble and then after replace_with_na_all is used
tibble1
tibble1 %>% naniar::replace_with_na_all(condition = ~.x == -99)
# Example factor without missing values
tibble2 <- tribble(
~x, ~y,
"a", 1,
"b", 2,
"c", -99
)
tibble2$x <- as.factor(tibble2$x)
levels(tibble2$x) <- list("A" = "a",
"B" = "b",
"C" = "c")
# Showing original tibble and then after replace_with_na_all is used
tibble2
tibble2 %>% naniar::replace_with_na_all(condition = ~.x == -99)
没有错误消息,我只是没有想到这种行为,并且在文档中找不到它的原因(或解决方法)。这是错误吗?功能吗?
帮助。
答案 0 :(得分:0)
是否有使用naniar
的特定原因,或者可以使用dplyr
? dplyr
保留列中的数据类型:
> dplyr::mutate_all(tibble1, funs(replace(., . == -99, NA)))
# A tibble: 3 x 2
x y
<fct> <dbl>
1 a 1
2 NA 2
3 c NA
> dplyr::mutate_all(tibble2, funs(replace(., . == -99, NA)))
# A tibble: 3 x 2
x y
<fct> <dbl>
1 a 1
2 b 2
3 c NA