Ma première approche a été d'utiliser na.strings=""
Lorsque je lisais les données d'un csv. Cela ne fonctionne pas pour une raison quelconque. J'ai aussi essayé:
df[df==''] <- NA
Ce qui m'a donné une erreur: impossible d'utiliser la matrice ou le tableau pour l'indexation des colonnes.
J'ai essayé juste la colonne:
df$col[df$col==''] <- NA
Cela convertit chaque valeur de la trame de données entière en NA, même s'il existe des valeurs en plus des chaînes vides.
J'ai ensuite essayé d'utiliser mutate_all
:
replace.empty <- function(a) {
a[a==""] <- NA
}
#dplyr pipe
df %>% mutate_all(funs(replace.empty))
Cela convertit également chaque valeur de la trame de données entière en NA.
Je soupçonne que quelque chose est bizarre dans mes cordes "vides" puisque la première méthode n'a eu aucun effet mais je ne sais pas quoi.
EDIT (à la demande de MKR) Sortie de dput(head(df))
:
structure(c("function (x, df1, df2, ncp, log = FALSE) ", "{",
" if (missing(ncp)) ", " .Call(C_df, x, df1, df2, log)",
" else .Call(C_dnf, x, df1, df2, ncp, log)", "}"), .Dim = c(6L,
1L), .Dimnames = list(c("1", "2", "3", "4", "5", "6"), ""), class =
"noquote")
Je ne sais pas pourquoi df[df==""]<-NA
n'aurait pas fonctionné pour OP
. Prenons un exemple data.frame et étudions les options.
Option # 1: Base-R
df[df==""]<-NA
df
# One Two Three Four
# 1 A A <NA> AAA
# 2 <NA> B BA <NA>
# 3 C <NA> CC CCC
Option # 2: 1dplyr :: mutate_all1 et na_if
. Ou mutate_if
si le bloc de données contient plusieurs types de colonnes
library(dplyr)
mutate_all(df, list(~na_if(.,"")))
OR
#if data frame other types of character Then
df %>% mutate_if(is.character, list(~na_if(.,"")))
# One Two Three Four
# 1 A A <NA> AAA
# 2 <NA> B BA <NA>
# 3 C <NA> CC CCC
Données de jouets:
df <- data.frame(One=c("A","","C"),
Two=c("A","B",""),
Three=c("","BA","CC"),
Four=c("AAA","","CCC"),
stringsAsFactors = FALSE)
df
# One Two Three Four
# 1 A A AAA
# 2 B BA
# 3 C CC CCC