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.
Se alguem tiver uma sugestão, valeuuu!
Athos
2
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!