【问题标题】:Import a .csv with large numbers into R without scientific notation在没有科学记数法的情况下将具有大量数字的 .csv 导入 R
【发布时间】:2020-07-19 21:31:42
【问题描述】:

我有一个 Microsoft Excel (.xlsx) 文件,我想将它加载到 R 中。我之前已经这样做过并使用了 read.csv(),它总是可以正常工作,但是使用这个文件会发生一些奇怪的事情。一列似乎出了点问题,其中包含行名和值为 13 位的大数字。此列 - 无论我如何尝试将文件加载到 R 中 - 都已转换为其科学记数法。

问题可以模拟如下:在Excel中,先在第一列输入 行,一个随机的行名。在第一列第二行输入一个随机的大数字,例如6345157890027。然后将文件另存为.csv。假设我想在 R 中打开这个文件: TestData <- read.csv(file = "Test.csv", head = TRUE) 然后 View(TestData)

数字 6345157890027 现在显示为 6.345158e+12,并且在导入过程中某处信息丢失。现在,我尝试了多种方式来解决这个问题:

  • 在 .xlsx 和 .csv 文件中,我转换了行 转成数字格式
  • 尝试了 Excel 允许我保存的所有 .csv 格式
  • 将整个工作表复制到一个新的 Excel 文件中
  • 在 Excel 中使用了导入数据功能
  • 将工作表另存为 .txt 并使用 File->Import Dataset 函数将其导入 R

但是,这些都没有解决问题:值似乎总是以科学计数法出现。有人知道如何确保 Excel 或 R 不会将大数转换为科学记数法吗?

【问题讨论】:

  • 您确定丢失了信息吗?当你使用print(..., digits = 15) 会发生什么
  • 你是对的,信息没有丢失,只是显示方式不同。但是,我仍然希望能够将信息显示为一个整数。
  • 使用options(digits = 15)
  • 感谢您的 cmets。但我应该澄清自己:我看到使用这个选项,可以以非科学的方式在 R 控制台中显示值。但是,当我使用例如 View(TestData) 时,我仍然看到科学记数法。有没有办法克服这个问题,它会让我更方便
  • 你能提供一个可重现的例子,它不起作用。这对我来说可以产生所有数字:options(digits = 15); DF <- data.frame(x = 6345157890027); View(DF)

标签: r excel csv export-to-csv


【解决方案1】:

我使用format 函数解决了这个问题,正如rnso 在另一篇文章中提出的那样(参见How to prevent scientific notation in R?):

> xx = 100000000000
> xx
[1] 1e+11
> format(xx, scientific=F)
[1] "100000000000"

对于我在数据框中错误显示的列也非常有效

【讨论】:

    【解决方案2】:

    您可以使用 bit64 包中的 as.bit64 函数。只要确保不使用 64 位数字来引用其他 R 对象。此解决方案适用于在 +-2^63 范围内找到的数字。

    【讨论】:

    • 如果您没有像其他评论所述丢失任何信息,那么此解决方案将无济于事。您的数字不够大,不需要 64 位存储。
    【解决方案3】:

    只需声明options(scipen = 999) 并确保环境不会将大数变为指数形式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多