26

次のデータを含む .csv ファイルがあります。

"Ա","Բ"
1,10
2,20

ファイルにあるように列名が表示されるように、Rに読み込むことができません。

d <- read.csv("./Data/1.csv", fileEncoding="UTF-8")
head(d)

以下を生成します。

> d <- read.csv("./Data/1.csv", fileEncoding="UTF-8")
Warning messages:
1: In read.table(file = file, header = header, sep = sep, quote = quote,  :
  invalid input found on input connection './Data/1.csv'
2: In read.table(file = file, header = header, sep = sep, quote = quote,  :
  incomplete final line found by readTableHeader on './Data/1.csv'
> head(d)
[1] X.
<0 rows> (or 0-length row.names)

一方、fileEncoding を指定せずに同じことを行うと、次のようになります。

> d <- read.csv("./Data/1.csv")
> head(d)
  Ô. Ô²
1  1 10
2  2 20

「ファイル」ユーティリティを実行してファイルのエンコーディングを確認すると、UTF-8 と表示されます。

Data\1.csv: UTF-8 Unicode text, with CRLF line terminators

RStudio、Windows 7、R バージョン 2.15.2、32 ビットを使用しています。

前もって感謝します。

4

3 に答える 3

13

ここで同じ問題についてより長い回答を書きました: R on Windows: character encoding hell

fileEncoding の代わりにパラメーター encoding を使用すると、最初の問題が解決するはずです。コンソールまたは RStudio のテーブル ビューで読み取ることはできませんが、数式で使用することはできます。

d <- read.csv("./Data/1.csv", encoding="UTF-8")
head(d)

テーブルを UTF-8 ファイルに保存すると、次のようになります。

> test2 <- read.csv("test2.csv", header = FALSE, sep = ",", quote = "\"", dec = ".", fill = TRUE, comment.char = "", encoding = "UTF-8")
Warning message:
In read.table(file = file, header = header, sep = sep, quote = quote,  :
  incomplete final line found by readTableHeader on 'test2.csv'

これにより、コンソールと RStudio ビューでどのように見えるかがわかります

> test2
        V1       V2
1 <U+0531> <U+0532>
2        1       10
3        2       20

ただし、重要なのは、R 内でこれを操作できることです。したがって、私の場合、スクリプト ウィンドウの入力 ı が UTF-8 エンコーディングを持っていることがわかり、grep がテーブルでこのエンコーディングを正しく見つけます。

> Encoding("Ա")
[1] "UTF-8"
> grep("Ա", as.character(test2[1,1]))
[1] 1

設定で動作する適切なエンコーディング バリアントを見つけるか、場合によってはそれらを変更する必要がある場合があります。残念ながら、私はそれがどこで行われたかわかりません。

すべての段階できれいにできるわけではありませんが、Windows 7 環境でも確実に動作させることができます。

于 2015-02-11T18:29:40.560 に答える
0

あなたの問題を再現するために2つの方法を試しました。

上記の文字を RStudio にコピーし、次のコードで csv に保存しました。

write.csv(c("Ա","Բ",
             1,10,
             2,20), "test.csv")

df <- read.csv("test.csv")

これはうまくいきました。

それから、RでCSVに保存すると、Rが不正行為をしているのではないかと思いました。そのため、文字をテキスト ファイルに貼り付けて CSV として保存しました。このアプローチにも問題はありません。

ここに私のセッション情報があります:

sessionInfo()
R version 3.0.1 (2013-05-16)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
[1] LC_CTYPE=en_CA.UTF-8       LC_NUMERIC=C               LC_TIME=en_CA.UTF-8       
[4] LC_COLLATE=en_CA.UTF-8     LC_MONETARY=en_CA.UTF-8    LC_MESSAGES=en_CA.UTF-8   
[7] LC_PAPER=C                 LC_NAME=C                  LC_ADDRESS=C              
[10] LC_TELEPHONE=C             LC_MEASUREMENT=en_CA.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats4    grid      stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] party_1.0-9       modeltools_0.2-21 strucchange_1.4-7 sandwich_2.2-10   zoo_1.7-10       
[6] GGally_0.4.4      reshape_0.8.4     plyr_1.8          ggplot2_0.9.3.1  

loaded via a namespace (and not attached):
[1] coin_1.0-23        colorspace_1.2-2   dichromat_2.0-0    digest_0.6.3      
[5] gtable_0.1.2       labeling_0.2       lattice_0.20-23    MASS_7.3-29       
[9] munsell_0.4.2      mvtnorm_0.9-9995   proto_0.3-10       RColorBrewer_1.0-5
[13] reshape2_1.2.2     scales_0.2.3       splines_3.0.1      stringr_0.6.2 
于 2013-09-20T16:31:03.897 に答える
0

同じ問題が発生し、ファイルが破損していることがわかりました。

OpenOfficeでファイルを開き、「UTF8」文字セットを使用して保存し直し(フィルター設定の編集ボックスをクリックする必要があります)、read.csv()(エンコードまたはファイルエンコードオプションなし)でインポートしたところ、正常に機能しました。

于 2014-08-21T11:35:40.530 に答える