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?

11
demandé sur Metrics 2013-06-25 11:13:42

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
13
répondu agstudy 2013-06-25 08:01:22

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.

1
répondu dickoa 2013-06-25 07:53:29

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)})

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.

1
répondu Tyler Rinker 2018-08-15 13:23:32