Changer les cellules vides à " NA"
Mon objectif est d'attribuer " NA " à toutes les cellules vides indépendamment des valeurs catégoriques ou numériques. J'utilise na.chaînes="". Mais ce N'est pas attribuer NA à toutes les cellules vides.
## reading the data
dat <- read.csv("data2.csv")
head(dat)
mon hr acc alc sex spd axles door reg cond1 drug1
1 8 21 No Control TRUE F 0 2 2 Physical Impairment (Eyes, Ear, Limb) A
2 7 20 No Control FALSE M 900 2 2 Inattentive D
3 3 9 No Control FALSE F 100 2 2 2004 Normal D
4 1 15 No Control FALSE M 0 2 2 Physical Impairment (Eyes, Ear, Limb) D
5 4 21 No Control FALSE 25 NA NA D
6 4 20 No Control NA F 30 2 4 Drinking Alcohol - Impaired D
inj1 PED_STATE st rac1
1 Fatal <NA> F <NA>
2 Moderate <NA> F <NA>
3 Moderate <NA> M <NA>
4 Complaint <NA> M <NA>
5 Complaint <NA> F <NA>
6 Moderate <NA> M <NA>
## using na.strings
dat2 <- read.csv("data2.csv", header=T, na.strings="")
head(dat2)
mon hr acc alc sex spd axles door reg cond1 drug1
1 8 21 No Control TRUE F 0 2 2 <NA> Physical Impairment (Eyes, Ear, Limb) A
2 7 20 No Control FALSE M 900 2 2 <NA> Inattentive D
3 3 9 No Control FALSE F 100 2 2 2004 Normal D
4 1 15 No Control FALSE M 0 2 2 <NA> Physical Impairment (Eyes, Ear, Limb) D
5 4 21 No Control FALSE 25 NA NA <NA> <NA> D
6 4 20 No Control NA F 30 2 4 <NA> Drinking Alcohol - Impaired D
inj1 PED_STATE st rac1
1 Fatal NA F NA
2 Moderate NA F NA
3 Moderate NA M NA
4 Complaint NA M NA
5 Complaint NA F NA
6 Moderate NA M NA
6 réponses
Je suppose que vous parlez de ligne 5 colonne " sexe."Ce pourrait être le cas que dans les données2.fichier csv, la cellule contient un espace et n'est donc pas considérée comme vide par R.
Aussi, j'ai remarqué que dans la rangée 5 colonnes "essieux" et "porte", les valeurs d'origine lues à partir de data2.csv sont la chaîne "NA". Vous voulez probablement les traiter comme na.cordes aussi. Pour ce faire,
dat2 <- read.csv("data2.csv", header=T, na.strings=c("","NA"))
Modifier:
J'ai téléchargé vos données2.csv. Oui, il y a un espace dans la rangée 5 colonne "sexe". Si vous voulez
na.strings=c(""," ","NA")
Vous pouvez utiliser gsub pour remplacer plusieurs mutations de vide, comme "" ou un espace, pour être NA:
data= data.frame(cats=c('', ' ', 'meow'), dogs=c("woof", " ", NA))
apply(data, 2, function(x) gsub("^$|^ $", NA, x))
Une solution plus conviviale en utilisant {[1] } serait
require(dplyr)
## fake blank cells
iris[1,1]=""
## define a helper function
empty_as_na <- function(x){
if("factor" %in% class(x)) x <- as.character(x) ## since ifelse wont work with factors
ifelse(as.character(x)!="", x, NA)
}
## transform all columns
iris %>% mutate_each(funs(empty_as_na))
Pour appliquer la correction à un sous-ensemble de colonnes, vous pouvez spécifier des colonnes d'intérêt en utilisant la syntaxe de correspondance de colonnes de dplyr. Exemple:mutate_each(funs(empty_as_na), matches("Width"), Species)
Dans le cas où votre table contient des dates, vous devriez envisager d'utiliser une version plus typesafe de ifelse
J'ai récemment rencontré des problèmes similaires. C'est ce qui a fonctionné pour moi, si la variable est numérique, un simple df$Var[df$Var == ""] <- "NA"
devrait suffire. Mais si la variable est un facteur, vous devez d'abord la convertir en caractère, puis remplacer les cellules ""
par la valeur souhaitée et la convertir en facteur. Donc, au cas par cas, votre variable de sexe, je suppose que ce serait un facteur et si vous voulez remplacer la cellule vide, je ferais ce qui suit:
df$Var <- as.character(df$Var)
df$Var[df$Var==""] <- "NA"
df$Var <- as.factor(df$Var)
Ne pourriez-vous pas simplement utiliser
dat <- read.csv("data2.csv",na.strings=" ",header=TRUE)
Devrait convertir tous les blancs en NA au fur et à mesure que les données sont lues assurez-vous de mettre un espace entre votre devis
Appelez dplyr
package en installant à partir de cran
dans r
library(dplyr)
(file)$(colname)<-sub("-",NA,file$colname)
Il convertira toute la cellule vide dans une colonne particulière comme NA
Si la colonne contient" -","", 0 comme ceci, changez-la en code en fonction du type de cellule vide
Par exemple, si j'obtiens une cellule vide comme "" au lieu de" -", alors utilisez ce code:
(file)$(colname)<-sub("", NA, file$colname)