Substituir string do DF por NA

Boa tarde.

Preciso de ajuda com a seguinte situação:

A base que estou trabalhando vem com diversos valores negativos ex: “-0.516” e com vários campos “-” que são valores faltantes.

Queria transformar todos valores “-” em “NA” sem alterar os números negativos. Abaixo coloquei um exemplo do problema.

exempl

Se alguem tiver uma sugestão, valeuuu!

Tem a funcao dplyr::na_if(). Mas tbm dá pra tirar proveito do as.numeric() que vai limpar tudo o que não parecer número pra NA.

library(dplyr)

df <- data.frame(
    v1 = c(5, 3, "-", 8), 
    v2 = c("-", 0.8, -0.2, -2), 
    nome = c("joao", "-", "eduardo", "pedro")
)

# usando na_if pra tudo -------------------------------------------------
df %>% mutate(across(everything(), ~na_if(.x, "-")))
#>     v1   v2    nome
#> 1    5 <NA>    joao
#> 2    3  0.8    <NA>
#> 3 <NA> -0.2 eduardo
#> 4    8   -2   pedro


# sofisticando pra tratar numeric e character diferenciadamente ---------
parece_numeric <- function(var) {
    mean((!is.na(as.numeric(var)))) > 0.5
}

df %>% 
    mutate(
        across(where(parece_numeric), as.numeric),
        across(where(is.character), ~na_if(.x, "-"))
    )
#>   v1   v2    nome
#> 1  5   NA    joao
#> 2  3  0.8    <NA>
#> 3 NA -0.2 eduardo
#> 4  8 -2.0   pedro

Created on 2020-11-15 by the reprex package (v0.3.0)

2 Curtidas

Valeuu Athos, problema resolvido!