Stataデータセットを[〜#〜] r [〜#〜]にインポートすると(foreign
パッケージを使用して)、インポートに無効な文字が含まれることがあります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
データセット全体でdplyrを使用して不良文字を削除する別のアプローチ:
library(dplyr)
MyDate %>%
mutate_at(vars(MyTextVar1, MyTextVar2), function(x){gsub('[^ -~]', '', x)})
ここで、MyData
とMyTextVar
は、不良リンゴを削除するデータセットとテキスト変数です。これは、エンコーディングを変更するよりも堅牢ではないかもしれませんが、多くの場合、それらを削除するだけで十分で簡単です。
それらを削除する代わりに、iconv
を使用してそれらをUTF-8文字列に変換してみることができます。
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に置き換えることができます。私たちはあなたのデータにアクセスできないので、どちらがより適しているかを知ることは困難です。
Yihuiのxfun
パッケージには、ファイルを読み取ろうとする_read_utf8
_関数があり、それがUTF-8としてエンコードされていると想定しています。ファイルに非UTF-8行が含まれている場合、警告がトリガーされ、どの行に非UTF-8文字が含まれているかが通知されます。内部では、エクスポートされていない関数xfun:::invalid_utf8()
を使用します。これは、単にwhich(!is.na(x) & is.na(iconv(x, "UTF-8", "UTF-8")))
です。
文字列内のdetect特定の非UTF-8単語にするには、上記を少し変更して、次のようなことを行います。
_invalid_utf8_ <- function(x){
!is.na(x) & is.na(iconv(x, "UTF-8", "UTF-8"))
}
detect_invalid_utf8 <- function(string, seperator){
stringSplit <- unlist(strsplit(string, seperator))
invalidIndex <- unlist(lapply(stringSplit, invalid_utf8_))
data.frame(
Word = stringSplit[invalidIndex],
stringIndex = which(invalidIndex == TRUE)
)
}
x <- "This is a string fa\xE7ile blah blah blah fa\xE7ade"
detect_invalid_utf8(x, " ")
# Word stringIndex
# 1 façile 5
# 2 façade 9
_