R没有正确导入csv文件

时间:2013-07-22 13:21:38

标签: r csv import

我对R有一个奇怪的问题。它没有正确导入我从Excel导出的csv文件。我有以下csv文件(我检查了文本格式与Excel中的单元格值相同):

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 = ";")

现在,我特别想检查CODE列是否匹配,因为我需要这些值来将它们与我在其他地方存储的某些文件进行比较。但是,当我将这些文件与tekst文件(以及Excel中的单元格值)进行比较时,使用options(digits = 19);

Ex$CODE
[1] 871685920001760384 871685920001765760 871685920001804288

如您所见,这些值根本不匹配!尝试as.character()会得到相同的结果:

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

有谁知道如何解决这个问题?我也尝试了stringsAsFactors = FALSE但没有用。

提前致谢!

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分:5)

@JakeBurkhead给出了解决方案,但之所以发生这种情况,是因为默认情况下read.csv会将值解释为numericnumeric值受浮点运算规则的约束,特别是doubles的规则。

这就是R解释这个值的方式:

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

双打为一个数字提供53位精度,略低于10 ^ 16。您的号码几乎是10 ^ 18,因此无法准确表示单位级别。