Как определить / удалить символы, отличные от UTF-8 в R
когда я импортирую набор данных Stata в R (используя внешний пакет), импорт иногда содержит символы, которые не являются допустимыми UTF-8. Это достаточно неприятно само по себе, но он ломает все, как только я пытаюсь преобразовать объект в JSON (используя пакет rjson).
У вас есть идея, как я могу идентифицировать недействительные-UTF-8-символы в строке и удалить их после этого?
3 ответов
другое решение с использованием iconv
и это аргумент sub
: строку символов. Если не NA(здесь я установил его в"), он используется для замены любых неконвертируемых байтов на входе.
x <- "fa\xE7ile"
Encoding(x) <- "UTF-8"
iconv(x, "UTF-8", "UTF-8",sub='') ## replace any non UTF-8 by ''
"faile"
здесь обратите внимание, что если мы выберем правильную кодировку:
x <- "fa\xE7ile"
Encoding(x) <- "latin1"
xx <- iconv(x, "latin1", "UTF-8",sub='')
facile
вместо их удаления вы можете попытаться преобразовать их в строку UTF-8 с помощью 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")
}
вы можете заменить latin1
более подходящим enconding в вашем случае.
Поскольку мы не имеем доступа к вашим данным трудно понять, какой из них будет более подходящей.
другой подход для удаления плохих символов с помощью dplyr для всего набора данных:
library(dplyr)
MyDate %>%
mutate_at(vars(MyTextVar1, MyTextVar2), function(x){gsub('[^ -~]', '', x)})
здесь MyData
и MyTextVar
- это набор данных и текстовые переменные для удаления плохих яблок. Это может быть менее надежным, чем изменение кодировки, но часто это нормально и проще просто удалить их.