R não pode converter NaN em NA para grandes quadros de dados
Pergunta
Eu tenho um conjunto de dados de tamanho decente de aproximadamente 60 colunas que foi preenchido acidentalmente com NaN
é em vez de NA
's.Os tipos de coluna são uma mistura de caractere, numérico, fator e número inteiro.preciso converter o NaN
é para NA
enquanto eles estão bagunçando o trabalho em várias funções, incluindo regressão linear.Estou ciente de como alterar uma coluna individual desta pergunta aqui:
R não pode converter NaN em NA
mas estou curioso para saber se existe uma maneira de fazer isso para um quadro de dados completo sem perder os tipos de vetor.Alguma sugestão ou este é um trabalho manual?
Solução
Isso funcionaria?(Deve ser para vetores numéricos, inteiros, caracteres e fatores.)
as.data.frame( lapply(dat, function(col) {
if (is.numeric(col)) { is.na(col) <- is.nan(col); return(col)} else {
if (is.character(col) || is.factor(col) ) {
is.na(col) <- col == "NaN"; return(col)} else {
return(col) }
}
}
)
dat <-
structure(list(tester1 = structure(c(1L, 1L, 2L, 3L, 1L, 2L,
4L), .Label = c("2", "3", "4", "NaN"), class = "factor"), tester2 = c(2,
2, 3, 4, 2, 3, NaN)), .Names = c("tester1", "tester2"), row.names = c(NA,
-7L), class = "data.frame")
# Produced:
tester1 tester2
1 2 2
2 2 2
3 3 3
4 4 4
5 2 2
6 3 3
7 <NA> NA
Outras dicas
Seria
gsub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,
fixed = FALSE, useBytes = FALSE)
Trabalhar?
Talvez você precise de uma mistura com apply
.Você poderia fornecer um pequeno exemplo para que eu possa tentar implementá-lo?
Obrigado.
Usando o conjunto de dados de amostra acima.Experimente isto:
CMBv = colnames(dat)
dat[CMBv] = lapply(dat[CMBv], function(x){ifelse(is.nan(x), NA,x)} )