当我在R中导入Stata数据集(使用外部包)时,导入有时包含无效的UTF-8字符。这本身就令人不愉快,但是一旦我尝试将对象转换为JSON(使用rjson包),它就会破坏所有内容。
您是否知道如何识别字符串中的无效UTF-8字符并在此之后将其删除?
当我在R中导入Stata数据集(使用外部包)时,导入有时包含无效的UTF-8字符。这本身就令人不愉快,但是一旦我尝试将对象转换为JSON(使用rjson包),它就会破坏所有内容。
您是否知道如何识别字符串中的无效UTF-8字符并在此之后将其删除?
另一种解决方案 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
在你的情况下更合适的借口。
由于我们无法访问您的数据,因此很难知道哪一个更适合您。
另一种在整个数据集上使用dplyr删除坏字符的方法:
library(dplyr)
MyDate %>%
mutate_at(vars(MyTextVar1, MyTextVar2), function(x){gsub('[^ -~]', '', x)})
哪里 MyData
和 MyTextVar
是数据集和文本变量来删除坏苹果。这可能不如改变编码那么健壮,但通常只需删除它们就可以了。
另一种解决方案 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
在你的情况下更合适的借口。
由于我们无法访问您的数据,因此很难知道哪一个更适合您。
另一种在整个数据集上使用dplyr删除坏字符的方法:
library(dplyr)
MyDate %>%
mutate_at(vars(MyTextVar1, MyTextVar2), function(x){gsub('[^ -~]', '', x)})
哪里 MyData
和 MyTextVar
是数据集和文本变量来删除坏苹果。这可能不如改变编码那么健壮,但通常只需删除它们就可以了。