簡體   English   中英

無法將unicode .csv讀入R

[英]Cannot read unicode .csv into R

我有一個.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位。

提前致謝。

我在這里寫了一個更長的答案: Windows上的R:字符編碼地獄

快速回答,使用參數編碼而不是fileEncoding應該解決您的第一個問題。 您將無法在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環境中使其工作。

我嘗試了兩種方法來復制你的問題。

我將上面的字符復制到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 

我遇到了同樣的問題,發現該文件已損壞。

我用OpenOffice打開文件並使用“UTF8”字符集保存回來(你需要點擊編輯過濾器設置框),然后用read.csv() (沒有編碼或文件編碼選項)導入它,它運行正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM