2013-07-22 3 views
3

R에서 이상한 문제가 있습니다. Excel에서 내보내는 CSV 파일을 올바르게 가져 오지 못합니다. 나는 다음과 같은 CSV 파일이 (필자는 텍스트 형식으로 Excel에서 셀 값과 동일한 것을 확인) :R이 csv 파일을 올바르게 가져 오지 않았습니다.

REGION;TYPE;CODE;BILL 
A;X;871685920001760387;003007614504 
B;Y ;871685920001765726;003007638434 
C;Z;871685920001804326;003211001858 

위 내 csv 파일의 내용입니다. "Example.csv"로 저장했습니다. 지금은 R에이 파일을 가져올 :

Ex <- read.csv2("Example.csv", header = TRUE, sep = ";") 

지금, 나는 특별히 내가 다른 곳에 저장 한 일부 파일에 대해이를 비교하기 위해이 값을 필요로 들어, 코드 열이 일치하는지 확인하고 싶습니다. 그러나이 파일을 options(digits = 19)을 사용하여 tekst 파일 (및 Excel의 셀 값)과 비교할 때;

Ex$CODE 
[1] 871685920001760384 871685920001765760 871685920001804288 

이 값은 전혀 일치하지 않습니다.

as.character(Ex$CODE) 
[1] "871685920001760384" "871685920001765760" "871685920001804288" 

사람이이 문제를 해결하는 방법을 알고 있나요 : as.character()이 같은 결과를 제공하려고? 나는 또한 작동하지 않았다 stringsAsFactors = FALSE를 시도했다.

미리 감사드립니다.

+0

일반적으로 CSV 파일의 형식은 "one", "two", "three"입니다. Excel에서 내보내기 설정을 확인합니다. – BigBadOwl

+0

read.csv2 대신 read.csv를 사용해 보셨습니까? –

답변

8

colClasses을 설정하면 문자를 모두 읽을 수 있습니다.

> Ex = read.table("Example.csv", sep = ";", header = TRUE, colClasses = "character") 
> Ex 
    REGION TYPE    CODE   BILL 
1  A X 871685920001760387 003007614504 
2  B Y 871685920001765726 003007638434 
3  C Z 871685920001804326 003211001858 
!> sapply(Ex, class) 
     REGION  TYPE  CODE  BILL 
"character" "character" "character" "character" 
+0

위대한 작품! 그것은 쉽다! 감사! –

+0

@ Tim.Lucas 이것이 일어나는 이유에 대한 James의 설명을보십시오. 자세한 정보는'? .Machine'을보십시오 –

5

@JakeBurkhead 솔루션을 주었지만 기본적으로 read.csvnumeric로 값을 해석하기 때문에 이런 일이 이유입니다. numeric 값은 부동 소수점 산술 규칙에 의해 제한되며, 특히 doubles입니다.

print(871685920001760387,digits=18) 
[1] 871685920001760384 

복식 10^16보다 약간 적은 수의 정밀도는 53 개 비트를 운반 :

이것은 R의 값을 해석하는 방법이다. 귀하의 전화 번호는 거의 10^18이며 ​​따라서 단위 수준까지 정확하게 나타낼 수는 없습니다.

+0

좋아요, 설명해 주셔서 감사합니다! 이를 명심하십시오. –

관련 문제