naniar :: replace_with_na_all将因子变量更改为整数?

时间:2019-10-30 08:52:31

标签: r naniar

我有一个数据集,其中一些缺少的值编码为-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)  

没有错误消息,我只是没有想到这种行为,并且在文档中找不到它的原因(或解决方法)。这是错误吗?功能吗?

帮助。

1 个答案:

答案 0 :(得分:0)

是否有使用naniar的特定原因,或者可以使用dplyrdplyr保留列中的数据类型:

> 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