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 NAenquanto 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?

Foi útil?

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)} )
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top