指数表示法不够精确

4
我已经导入了一个包含大量数字的数据集,这些数字自动转换为指数符号。因为我需要查看完整数字,所以我使用了options(scipen = 999)。但我发现导入的数字与数据集中的原始数字不相等。例如:5765949338897345178被更改为5765949338897345536。
为什么这些数字不同呢?奇怪的是,当我使用which(dim_alias1$id == 5765949338897345536)which(dim_alias1$id == 5765949338897345178)时,它返回相同的行号。这是怎么可能的呢?

2
一个双精度浮点数无法精确地保存这些值。 - Matthew Lundberg
1
这可能看起来有些违反直觉,但是对于“为什么这些看似相等的数字不相等”和“为什么这些看似不相等的数字被视为相等”的问题,答案是相同的。 - Dason
这些数字是ID号码,必须精确才能与其他数据集进行链接。这个问题该如何解决? - M.D.
1
那对我有用。非常感谢您提供快速简便的解决方案! - M.D.
1个回答

3

由于您将变量用作ID号码,所以它不需要是数字。因此,在读取时将列类设置为字符(在此处查看示例)

示例:

dat <- data.frame(id=12345, x=1)
write.table(dat, tmp <- tempfile())
dat2 <- read.table(tmp, colClasses = c(id="character"))
str(dat2)

#'data.frame':  1 obs. of  2 variables:
# $ id: chr "12345"
# $ x : int 1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接