Question

J'ai un ensemble de données de taille décente d'environ 60 colonnes qui a été accidentellement rempli avec NaNc'est au lieu de NA's.Les types de colonnes sont un mélange de caractères, numériques, facteurs et entiers.Je dois convertir le NaNc'est à NAC'est parce qu'ils bousillent les travaux sur plusieurs fonctions, y compris la régression linéaire.Je sais comment modifier une colonne individuelle de cette question ici :

R ne peut pas convertir NaN en NA

mais je suis curieux de savoir s'il existe un moyen de le faire pour une trame de données complète sans perdre les types de vecteurs.Des suggestions ou est-ce un travail manuel ?

Était-ce utile?

La solution

Cela fonctionnerait-il?(Il devrait pour les vecteurs numériques, entier, de caractère et de facteur.)

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

Autres conseils

Serait

gsub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,
     fixed = FALSE, useBytes = FALSE)

Travail?

Peut-être que tu aurais besoin d'un mélange avec apply.Pourriez-vous fournir un petit exemple afin que je puisse essayer de le mettre en œuvre ?

Merci.

Utilisation de l'exemple de jeu de données ci-dessus.Essayez ceci:

CMBv = colnames(dat)

dat[CMBv] = lapply(dat[CMBv], function(x){ifelse(is.nan(x), NA,x)} )

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top