【发布时间】:2015-01-13 09:59:15
【问题描述】:
我有一个 20 位数的 ID 变量。一旦我读取 R 中的数据,它就会更改为科学记数法,然后如果我将相同的 id 写入 csv 文件,则 ID 的值会发生变化。
例如,运行下面的代码应该将 x 的值打印为“12345678912345678912”,但它会打印“12345678912345679872”:
代码:
options(scipen=999)
x <- 12345678912345678912
打印(x)
输出:
[1] 12345678912345679872
我的问题是:
1) 为什么会这样?
2) 如何解决这个问题?
我知道这与 R 中数据类型的存储有关,但我仍然认为应该有一些方法来处理这个问题。我希望我对这个问题很清楚。
我不知道是否有人问过这个问题,所以如果它是重复的,请指向我的链接。我将删除此帖子
我已经通过this,所以我可以解决我的问题,但我无法解决它。
任何帮助将不胜感激。谢谢
【问题讨论】:
-
为什么不将变量格式化为字符?
-
我的意思是“以前”格式化它,就像当你导入数据时,你可以为 ID 变量指定字符 colClasses(这样的做法 x
-
这个数字太大了,不能用整数表示。因此,它被表示为一个双精度,这导致issues with floating point number accuracy。 R 中有possibilities to use big integers,但由于您的数字是 id,您应该遵循 CathG 的建议并将它们视为字符串。
-
@CathG 是的,它有效,这就是我现在的做法:read.csv("file.csv",colClasses=c("character",rep(NULL,1))) as我只有两列(ID 和值)。谢谢,顺便说一句,你可以把你的想法作为答案,我很乐意接受你的回答。
-
不错不错。我猜你的第二列是数字?所以你宁愿做 colClasses=c("character","numeric") (顺便说一句,如果你只重复一次,就不需要使用
rep;-))
标签: r