2013-05-30 39 views
20

Tôi có một tập tin .csv, trong đó có chứa các dữ liệu sau:Không thể đọc unicode .csv vào R

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

tôi không thể đọc nó vào R để các tên cột được hiển thị như họ đang có trong tập tin.

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

Tạo điều sau đây:

> 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) 

Trong khi đó, làm như vậy mà không chỉ định các fileEncoding sản xuất này:

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

Khi tôi chạy "tập tin" tiện ích để tìm hiểu mã hóa của tệp, nó nói là UTF-8:

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

Tôi đang sử dụng RStudio, Windows 7, R phiên bản 2.15.2, 32 bit.

Xin cảm ơn trước.

+0

Hoạt động hoàn hảo với tôi với R 2.15.3 trên Linux. (Cảnh báo thứ hai có thể chỉ là một thiếu "nhập" trên dòng cuối cùng của tập tin) – Spacedman

+4

Tôi có thể tái tạo vấn đề. Tôi chưa bao giờ sử dụng các tham số này, nhưng thay vào đó sử dụng 'encoding', nghĩa là' read.csv (..., encoding = "UTF-8") 'đọc trong tệp nhưng tiêu đề không được hiển thị dưới dạng chữ cái, mà là' XUFEFF..U.0531. X.U.0532.' để thay thế. – eddi

+1

một quan sát: '> a =" Ա "; > a; [1] "Ա" 'hoạt động ok, nhưng điều này không:' data.frame (a); # a # 1 ' – eddi

Trả lời

0

Tôi đã thử hai cách để tái tạo sự cố của bạn.

tôi sao chép các ký tự trên vào RStudio, lưu nó vào một csv với mã này:

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

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

này làm việc tốt.

Sau đó, tôi nghĩ, có lẽ R là gian lận khi tôi lưu nó vào CSV với R? Vì vậy, tôi chỉ dán các ký tự vào một tệp văn bản và lưu nó dưới dạng CSV. Cách tiếp cận này cũng không có vấn đề gì.

Dưới đây là thông tin phiên của tôi:

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 
0

tôi đã cùng một vấn đề và phát hiện ra rằng các tập tin bị hỏng.

Tôi đã mở tệp bằng OpenOffice và lưu lại bằng bộ ký tự "UTF8" (bạn cần phải nhấp vào hộp chỉnh sửa bộ lọc) và sau đó nhập nó với read.csv() (không có tùy chọn mã hóa hoặc mã hóa) và hoạt động tốt.

11

Tôi đã viết câu trả lời dài hơn về cùng một vấn đề tại đây: R on Windows: character encoding hell.

Câu trả lời nhanh, bằng cách sử dụng mã hóa tham số thay vì fileEncoding nên khắc phục vấn đề đầu tiên của bạn. Bạn sẽ không thể đọc nó có thể trong giao diện điều khiển hoặc bảng trong RStudio, nhưng bạn sẽ có thể sử dụng nó trong các công thức.

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

Sau khi lưu bảng của bạn thành một file 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' 

này cung cấp cho bạn như thế nào nó trông giống như trong giao diện điều khiển và RStudio xem

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

Tuy nhiên điều quan trọng bạn có thể để thao tác điều này trong R. Vì vậy, trong trường hợp của tôi có thể thấy rằng đầu vào cửa sổ kịch bản Ա có mã hóa UTF-8, và grep tìm chính xác mã hóa này trong bảng của bạn.

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

Bạn có thể cần tìm các biến thể mã hóa phù hợp hoạt động trên cài đặt của mình hoặc có thể thay đổi chúng. Thật không may tôi không chắc chắn nơi nó được thực hiện.

Bạn có thể không thể làm cho nó đẹp trong mọi giai đoạn, nhưng nó chắc chắn có thể làm cho nó hoạt động được trong môi trường Windows 7.