5

我对 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了,没有用。

提前致谢!

4

2 回答 2

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"
于 2013-07-22T13:27:26.050 回答
6

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

这就是 R 解释值的方式:

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

双精度数的精度为 53 位,略小于 10^16。您的数字几乎是 10^18,因此它不能精确地表示为单位级别。

于 2013-07-22T13:40:14.293 回答