Changer les cellules vides à " NA"

Voici le lien de mes données.

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
43
na r
demandé sur S Das 2014-06-12 00:35:06

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")
68
répondu Badoe 2014-06-12 02:15:08

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))
26
répondu sclarky 2014-06-11 22:15:56

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

10
répondu Holger Brandl 2018-09-13 09:38:07

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)
6
répondu ZKH 2016-11-19 23:03:38

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

1
répondu user8333183 2017-11-01 15:41:52

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)
-1
répondu guna baskar 2018-05-26 08:35:36