日本語のcsvをインポートしようとしています。このコード:
_url <- 'http://www.mof.go.jp/international_policy/reference/itn_transactions_in_securities/week.csv'
x <- read.csv(url, header=FALSE, stringsAsFactors=FALSE)
_
次のエラーを返します。
_Error in type.convert(data[[i]], as.is = as.is[i], dec = dec, na.strings = character(0L)) :
invalid multibyte string at '<91>ΊO<8b>y<82>ёΓ<e0><8f>،<94><94><84><94><83><8c>_<96>????̏????@(<8f>T<8e><9f><81>E<8e>w<92><e8><95>????@<8a>փx<81>[<83>X<81>j'
_
エンコーディング(Encoding(url) <- 'UTF-8'
およびlatin1に変更)を試し、read.csvパラメーターを削除しようとしましたが、それぞれの場合に同じ「無効なマルチバイト文字列」メッセージを受け取りました。使用すべき別のエンコーディングがありますか、それとも他の問題がありますか?
Encoding
は、文字列のエンコードを設定します。これは、文字列で表されるファイルのエンコードを設定しません。これは、必要なものです。
これは、"UTF-8"
:
x <- read.csv(url, header=FALSE, stringsAsFactors=FALSE, fileEncoding="latin1")
また、最初の16行をスキップして、ヘッダーを個別に読み込むこともできます。いずれにせよ、まだやるべきことがかなりあります。
x <- read.csv(url, header=FALSE, stringsAsFactors=FALSE,
fileEncoding="latin1", skip=16)
# get started with the clean-up
x[,1] <- gsub("\u0081|`", "", x[,1]) # get rid of odd characters
x[,-1] <- as.data.frame(lapply(x[,-1], # convert to numbers
function(d) type.convert(gsub(d, pattern=",", replace=""))))
システムロケールの非互換性のためにこの問題が発生した可能性があります。このコードでシステムロケールを設定してみてくださいSys.setlocale("LC_ALL", "C")
Tidyverseユニバースのリーダーパッケージが役立つ場合があります。
read_csv()
関数とそのエンコード引数を使用して、local()
関数のローカル引数を使用してエンコードを設定できます。
read_csv(file = "http://www.mof.go.jp/international_policy/reference/itn_transactions_in_securities/week.csv",
skip = 14,
local = locale(encoding = "latin1"))
データ/特殊文字を失うことなくこの問題を見つけた最も簡単なソリューション(たとえば、fileEncoding="latin1"
文字(ユーロ記号€は失われます)は、まずSublime Textなどのテキストエディターでファイルを開き、「エンコード付きで保存-UTF-8」です。
その後、Rは問題なく文字を失うことなくファイルをインポートできます。
私は同じエラーがあり、上記のすべてを試してみましたが役に立ちませんでした。 R 3.4.0から3.4.3にアップグレードすると問題は消えたので、Rバージョンが最新でない場合は更新してください!
この問題でRattle
を使用している場合は、次のように解決しました。
> library (rattle)
(まだ実行されていない場合)> crv$csv.encoding="latin1"
_> rattle()
それは私のために働いた、うまくいけば疲れた旅行者を助ける
Rにインポートしようとしているファイルが元はExcelファイルだった場合。元のファイルを開いてcsvとして保存すると、Rにインポートするときにこのエラーが修正されたことを確認してください.
科学記事でも同様の問題があり、ここで良い解決策を見つけました: http://tm.r-forge.r-project.org/faq.html
次のコード行を使用して:
tm_map(yourCorpus, content_transformer(function(x) iconv(enc2utf8(x), sub = "byte")))
マルチバイト文字列を16進コードに変換します。これがお役に立てば幸いです。