2015-01-28 17 views
3

here에서 설명하는 것과 동일한 문제가 있습니다. 유일한 차이점은 CSV 파일에 non_english 문자열이 포함되어있어 어떤 솔루션도 찾을 수 없다는 것입니다. CSV 파일을 읽을 때 를 인코딩하는 것은 나에게 오류를 제공하지 않습니다하지만 데이터가 변경 :읽기 csv + unicode R

network=read.csv("graph1.csv",header=TRUE) 

    اشپیل(60*4) 

내가 fileEncoding으로 read.csv을 실행하면 그것은 나에게이 오류 제공 :

network=read.csv("graph1.csv",fileEncoding="UTF-8",header=TRUE) 
Warning messages: 
1: In read.table(file = file, header = header, sep = sep, quote = quote, : 
    invalid input found on input connection 'graph1.csv' 
2: In read.table(file = file, header = header, sep = sep, quote = quote, : 
    incomplete final line found by readTableHeader on 'graph1.csv' 

network[1] 
[1] X. 
<0 rows> (or 0-length row.names) 

시스템 정보 :

을 16,
windows server 2008 
R:R3.1.2 

샘플 파일 : 나는 당신의 입력을 시도

node1,node2,weight 
ورق800*750*6,ورق 1350*1230*6mm,0.600000024 
ورق900*1200*6,ورق 1350*1230*6mm,0.600000024 
ورق76*173,ورق 1350*1230*6mm,0.600000024 
ورق76*345,ورق 1350*1230*6mm,0.600000024 
ورق800*200*4,ورق 1350*1230*6mm,0.600000024 
+0

의 중복 가능성 http://stackoverflow.com/questions/28005632/columns-names-not-read-properly- by-read-csv-in-r) –

+0

전체 파일이 올바르게 읽히지 않는 열 이름이 아닙니다. –

+0

두 번째 경고는 잊어 버린 캐리지 리턴으로 인해 내 대답에 따라 해결되어야합니다.그것은 가치가 무엇인지에 대한 –

답변

2

이 :

> read.csv("graph1.csv", encoding="UTF-8") 
         X.U.FEFF.node1         node2 weight 
1 <U+0648><U+0631><U+0642>800*750*6 <U+0648><U+0631><U+0642> 1350*1230*6mm 0.6 
2 <U+0648><U+0631><U+0642>900*1200*6 <U+0648><U+0631><U+0642> 1350*1230*6mm 0.6 
3  <U+0648><U+0631><U+0642>76*173 <U+0648><U+0631><U+0642> 1350*1230*6mm 0.6 
4  <U+0648><U+0631><U+0642>76*345 <U+0648><U+0631><U+0642> 1350*1230*6mm 0.6 
5 <U+0648><U+0631><U+0642>800*200*4 <U+0648><U+0631><U+0642> 1350*1230*6mm 0.6 
+0

감사 (나는 또한 캐리지 리턴이라고 부르는) 끝에 EOD의 delimitor을 넣어 아래의 결과가 있어야하지만, 여전히 나에게 경고'경고 메시지를 제공합니다 read.table (파일 = 파일 헤더에서 을 = 헤더 9 월 = 구월 견적 = 인용 :. 입력 연결 'graph1.csv'.' 단지 제 경고 발견 잘못된 입력을 해소하고 지금 헤더 파일 읽기'[1] 노드 1 노드 2 중량 <0 rows> (0 길이 row.names)' –

+0

당신이 파일의 샘플을 줄 수 있습니까? –

+0

첫 번째 코드의 출력을 보이지 않는 UTF-8 BOM이처럼. –

2

작업해야 다음 - 내가 가지고 있지 않기 때문에 마음이 당신이, 내가 그것을 테스트 할 수 없습니다 Windows (및 Windows, 유니 코드 및 R은 단순히 혼합하지 마십시오) :

x = read.csv('graph1.csv', fileEncoding = '', stringsAsFactors = TRUE) 

바이트 데이터를 인코딩으로 구문 분석하지 않고 그대로 읽었으므로 x은 횡설수설합니다.

Encoding(x[1, 1]) 
# [1] "unknown" 

이제 우리는 UTF-8로 취급하는 R 말씀 : 우리는이를 확인 할 수 있어야한다

x = as.data.frame(lapply(x, iconv, from = 'UTF-8', to = 'UTF-8), 
        stringsAsFactors = FALSE) 

이 두 단계

는 같은 encoding 대신 fileEncoding를 사용하여 하나로 압축 할 수 있습니다 인수는 read.csv :

x = read.csv('graph1.csv', encoding = 'UTF-8', stringsAsFactors = TRUE) 

두 경우 모두 대략 동일한 과정이 수행됩니다.

이 시점에서 x여전히은 R이 이해하는 유니 코드 코드 페이지를 지원하지 않으므로 횡설수 절이 나타납니다. Mac에서 비 UTF-8 코드 페이지와 코드를 실행할 때 사실, 나는 이제 출력을 다음 얻을 :

x[1, 1] 
# [1] "<U+0648><U+0631><U+0642>800*750*6" 

그러나, 적어도 인코딩이 올바르게 설정하고 바이트 구문 분석 :

그리고 UTF-8을 사용하는 장치 나 프로그램에 데이터를 전달하면 올바르게 표시되어야합니다. 예를 들어, plot 명령에서 데이터를 레이블로 사용하면 효과가 있습니다.

plot.new() 
text(0.5, seq(0, 1, along.with = x[, 1]), x[, 1]) 

plot output

[R read.csv에 의해 적절히 판독되지 열 이름 (
+0

설명에 대한 thansk,하지만 난 CSV로 데이터를 다시 작성해야하지만, 일부 분석 후 지금 그냥'X = read.csv ('graph1.csv'후 파일을 작성하여 인코딩 = 'UTF-8', stringsAsFactors = TRUE)'를 호출합니다. 실제 데이터가 아니라 인코딩 된 그대로 출력 해 보겠습니다. –

+0

@ academic.user 불행히도이 시점에서 Windows에 대한 나의 접근성 부족은 내가 무엇이 효과가 있을지 시험하지 못하게합니다. 하지만 파일을 쓰려고 했니? 데이터가 전혀 변경되지 않았으므로 이것이 작동 할 수 있습니다. –

+0

.thanks는 예 I는'네트워크 = read.csv ("graph1.csv"이후, 인코딩 = "UTF-8"(row.names = FALSE "network.csv"= 네트워크 파일)'write.csv 시도 헤더 = TRUE) '출력은' "XUFEFF.node1", "노드 2", "중량" " 800 * 750 * 6", " 1,350 * 1,230 * 6mm"0.600000024 " 900 * 1200 * 6", " 1350 * 1230 * 6mm", 0.600000024' –