web-dev-qa-db-ja.com

read.csvの無効なマルチバイト文字列

日本語の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パラメーターを削除しようとしましたが、それぞれの場合に同じ「無効なマルチバイト文字列」メッセージを受け取りました。使用すべき別のエンコーディングがありますか、それとも他の問題がありますか?

40
jaredwoodard

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=""))))
73
Joshua Ulrich

システムロケールの非互換性のためにこの問題が発生した可能性があります。このコードでシステムロケールを設定してみてくださいSys.setlocale("LC_ALL", "C")

10
user3670684

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"))
7
Je Hsers

データ/特殊文字を失うことなくこの問題を見つけた最も簡単なソリューション(たとえば、fileEncoding="latin1"文字(ユーロ記号€は失われます)は、まずSublime Textなどのテキストエディターでファイルを開き、「エンコード付きで保存-UTF-8」です。

その後、Rは問題なく文字を失うことなくファイルをインポートできます。

1
Guiwald Doh

私は同じエラーがあり、上記のすべてを試してみましたが役に立ちませんでした。 R 3.4.0から3.4.3にアップグレードすると問題は消えたので、Rバージョンが最新でない場合は更新してください!

0
user5783745

この問題でRattleを使用している場合は、次のように解決しました。

  1. 最初にガラガラを終了して、Rコマンドプロンプトで
  2. > library (rattle)(まだ実行されていない場合)
  3. _> crv$csv.encoding="latin1"_
  4. > rattle()
  5. これで続行できます。すなわち、csvをインポート>実行>モデル>実行など.

それは私のために働いた、うまくいけば疲れた旅行者を助ける

0
wired00

Rにインポートしようとしているファイルが元はExcelファイルだった場合。元のファイルを開いてcsvとして保存すると、Rにインポートするときにこのエラーが修正されたことを確認してください.

0
822_BA

科学記事でも同様の問題があり、ここで良い解決策を見つけました: http://tm.r-forge.r-project.org/faq.html

次のコード行を使用して:

tm_map(yourCorpus, content_transformer(function(x) iconv(enc2utf8(x), sub = "byte")))

マルチバイト文字列を16進コードに変換します。これがお役に立てば幸いです。

0
Carlos