我对R有一个奇怪的问题.它没有正确导入我从Excel导出的csv文件.我有以下csv文件(我检查了文本格式与Excel中的单元格值相同):
REGION;TYPE;CODE;BILL
A;X;871685920001760387;003007614504
B;Y ;871685920001765726;003007638434
C;Z;871685920001804326;003211001858
Run Code Online (Sandbox Code Playgroud)
以上是我的csv文件的内容.我把它保存为"Example.csv".现在我想将此文件导入R:
Ex <- read.csv2("Example.csv", header = TRUE, sep = ";")
Run Code Online (Sandbox Code Playgroud)
现在,我特别想检查CODE列是否匹配,因为我需要这些值来将它们与我在其他地方存储的一些文件进行比较.但是,当我将这些文件与tekst文件(以及Excel中的单元格值)进行比较时,使用options(digits = 19)
;
Ex$CODE
[1] 871685920001760384 871685920001765760 871685920001804288
Run Code Online (Sandbox Code Playgroud)
如您所见,这些值根本不匹配!尝试as.character()
给出相同的结果:
as.character(Ex$CODE)
[1] "871685920001760384" "871685920001765760" "871685920001804288"
Run Code Online (Sandbox Code Playgroud)
有谁知道如何解决这个问题?我也试过stringsAsFactors = FALSE
哪个不起作用.
提前致谢!
您可以通过设置将它们全部读作字符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"
Run Code Online (Sandbox Code Playgroud)
@JakeBurkhead给出了解决方案,但之所以发生这种情况,是因为read.csv
默认情况下会将值解释为numeric
.numeric
值受浮点算法规则的约束,特别是双精度算法.
这就是R解释这个值的方式:
print(871685920001760387,digits=18)
[1] 871685920001760384
Run Code Online (Sandbox Code Playgroud)
双打为一个数字提供53位精度,略低于10 ^ 16.您的号码几乎是10 ^ 18,因此无法准确表示单位级别.
归档时间: |
|
查看次数: |
7076 次 |
最近记录: |