Comment identifier/supprimer les caractères non-UTF-8 dans R
lorsque j'importe Un ensemble de données Stata dans R (en utilisant le paquet étranger), l'importation contient parfois des caractères qui ne sont pas valides UTF-8. C'est assez désagréable en soi, mais ça casse tout dès que j'essaie de transformer l'objet en JSON (en utilisant le paquet rjson).
avez-vous une idée, comment je peux identifier les non-valid-UTF-8-caractères dans une chaîne de caractères et les supprimer après cela?
3 réponses
une autre solution utilisant iconv
et argument it sub
: chaîne de caractères. Si pas NA(ici je l'ai mis à "), il est utilisé pour remplacer les non-convertibles octets dans l'entrée.
x <- "fa\xE7ile"
Encoding(x) <- "UTF-8"
iconv(x, "UTF-8", "UTF-8",sub='') ## replace any non UTF-8 by ''
"faile"
notez ici que si nous choisissons le bon encodage:
x <- "fa\xE7ile"
Encoding(x) <- "latin1"
xx <- iconv(x, "latin1", "UTF-8",sub='')
facile
au lieu de les supprimer, vous pouvez essayer de les convertir en chaîne UTF-8 en utilisant iconv
.
require(foreign)
dat <- read.dta("data.dta")
for (j in seq_len(ncol(dat))) {
if (class(dat[, j]) == "factor")
levels(dat[, j]) <- iconv(levels(dat[, j]), from = "latin1", to = "UTF-8")
}
Vous pouvez remplacer latin1
par un encondrement plus approprié dans votre cas.
Puisque nous n'avons pas accès à vos données est difficile de savoir laquelle sera la plus adaptée.
une Autre approche pour enlever le mauvais caractères à l'aide dplyr sur le jeu de données entier:
library(dplyr)
MyDate %>%
mutate_at(vars(MyTextVar1, MyTextVar2), function(x){gsub('[^ -~]', '', x)})
Où MyData
et MyTextVar
sont l'ensemble de données et les variables de texte pour supprimer les mauvaises pommes. Cela peut être moins robuste que le changement d'encodage, mais il est souvent bien et plus facile de simplement les enlever.