Excel到R,使用readxl导入时值改变



我对r很陌生,我需要处理一些我在excel中的列表,但是当用readxl导入它们时,数字似乎在变化。

我有一个电子表格(示例在这里),当我减去标签"target_intputs"到TAB "target_output "在excel中,总数为0(应该是这样,请参阅"比较";选项卡)。然而,在将其导入R后,如果我使用print(sum(target_inputs) - sum(target_outputs))比较它们,它会给我6.007031e-08作为总数。

下面是一个示例代码:

library(readxl)
target_inputs <- read_excel("C:\A Matrix - Table 5 2019-20.xlsx", sheet="target_inputs")
target_outputs <- read_excel("C:\A Matrix - Table 5 2019-20.xlsx", sheet="target_outputs")
target_inputs <- as.numeric(target_inputs)
target_outputs <- as.numeric(target_outputs)
print(sum(target_inputs) - sum(target_outputs))

我假设小数点可能有问题,所以我尝试了round()函数和options(digits=20)等,但我无法摆脱这个问题。这似乎只发生在R中,因为当我使用下面的代码再次导出它时,问题似乎消失了。

library(writexl)
write_xlsx(target_inputs, "C:\target_inputs.xlsx")
write_xlsx(target_outputs, "C:\target_outputs.xlsx")

任何帮助将非常感激,谢谢!

---- EDIT 1 ----这种情况发生在一些数据集上,其他数据集没有给我这个问题。

---- EDIT 2 ----我只是注意到,如果我用options(digits=22)增加小数点,我可以看到值的小数点的变化。例如,在excel中,"target_inputs"23923.72846564920000000是,并且在导入到Rtarget_inputs[[1]]后给我23923.72846564929932356. 但是,将其导出到xlsx会使值恢复到原始值……我不知道我做错了什么

我想我找到问题了。在意识到小数点在变化之后,我找到了这篇文章。似乎与浮点精度有关。解决方案(至少对我来说)是在将excel中的数字导入r之前对其进行四舍五入和调整。

相关内容

最新更新