Substituição de dados por NA

Boa tarde gente!
Estou com uma dúvida, o banco de dados que estou trabalhando está com alguns dados que foram colocados errados, portanto, eu gostaria de substitui-los por NA. Entretanto, não é a coluna inteira, são apenas alguns valores de algumas variáveis. Como eu posso fazer para substituir esses valores errados de um dataframe em NA?

Oi Thainara!

Existe alguma regra para identificar os valores incorretos?

Acho que a função case_when() do pacote dplyr pode ser útil. Escrevi um exemplo: imagine que queremos substituir alguns casos de eye_color dos personagens de starwars por NA:

    library(magrittr)
    library(dplyr)


    starwars %>% 
      select(name, eye_color) %>% 
            # nome da coluna
      mutate(eye_color_modificado = 
               case_when(
                 # alguma regra                     # o que vai substituir   
                 eye_color %in% c("red", "orange") ~ NA_character_,
                 # o que será colocado na coluna eye_color_modificado
                 # para valores que não cairam nas regras anteriores
                 TRUE ~ eye_color)
             )

Uma coisa para ter atenção é que o NA é representado nesse caso por NA_character_, pois a coluna que estamos criando é uma coluna de texto. Caso seja uma coluna de outro tipo, existem outros tipos de NA_*.

A documentação da função também mostra alguns exemplos: A general vectorised if — case_when • dplyr

e tbm tem o dplyr::na_if() pra trocar um valor por NA!

library(dplyr)
mtcars[1:5, 1:3] %>%
    mutate(across(mpg:disp, ~na_if(., 6)))
#>                    mpg cyl disp
#> Mazda RX4         21.0  NA  160
#> Mazda RX4 Wag     21.0  NA  160
#> Datsun 710        22.8   4  108
#> Hornet 4 Drive    21.4  NA  258
#> Hornet Sportabout 18.7   8  360

Created on 2021-08-04 by the reprex package (v2.0.0)

2 Curtidas