【问题标题】:Exporting large number to csv from R将大量数字从 R 导出到 csv
【发布时间】:2019-08-13 09:46:03
【问题描述】:

我在尝试将 R 数据帧导出到 csv 文件时遇到了一个奇怪的问题。 数据帧包含一些大数字,但是当它们被写入 csv 文件时,它们会“丢失”小数部分,而是在没有小数部分的情况下写入。 但不像人们期望的那样,而是这样:

说 3224571816.5649 是 R 中的正确值。当写入 csv 时,它变为 32245718165649。

我正在使用write.csv2 函数来编写 csv。分隔符是正确的,因为它通常适用于较小的值。是不是因为数字(带小数)大于 32 位而出现问题?

更重要的是,我该如何解决这个问题,因为我有一个值比这大(或更大)的整个数据框?此外,它必须写入 csv。

【问题讨论】:

  • 您不能在打印之前将数据框内容转换为文本/字符吗?
  • 您提供的号码对我有用。这与max.print 选项无关吗?你options('max.print') 的价值是多少?
  • 你也尝试过其他写方法(例如fwrite() from data.table)?
  • @Oka 当我阅读您的评论时,我检查了列类型。显然 R 已经将它们转换为字符。这就是导致问题的原因(以及为什么 JaKu 对这个数字没有问题)。问题是由于 $.$ 没有转换为 $,$ 因为 R 认为它们是字符串。

标签: r csv export-to-csv


【解决方案1】:

write.csv2 适用于不同的 csv 标准(西欧样式,基于您使用“.”作为十进制指示符,我猜您不是在寻找)。 write.csv2 使用逗号作为小数指示符,使用分号作为字段分隔符,因此如果您尝试将结果作为逗号分隔文件读取,它确实看起来很奇怪。

我建议您使用 write.csv(或者更好的是 write.table)来输出您的文件。 write.csv 假设小数点使用逗号分隔符和句点。

write.csv 和 write.csv2 都只是 write.table 的包装,这是底层方法。一般来说,我推荐使用 write.table,因为它不假设你的区域,你可以明确地传递它 sep = ",", dec = "." 等。这不仅让你确定你在使用什么,但它也使您的代码更具可读性。

有关更多信息,请查看 rdocumentation.org 站点以获取 write.table:https://www.rdocumentation.org/packages/utils/versions/3.5.3/topics/write.table

【讨论】:

  • 我认为我的评论被误解了。我使用了正确的样式(西欧),但由于数字(显然)太大,R 将它们从数字转换为字符。并且因为 R 使用小数点,新的字符串有“。”作为十进制指示符,这会导致问题,因为我的系统期望“,”。所以我必须手动更改数字字符串(或再次手动将它们转换为数字)。
  • 有趣!听起来答案就在您面前:在将其写入 csv 之前将该列转换为字符串,您不会将“,”替换为“。”
猜你喜欢
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
  • 2016-09-01
  • 1970-01-01
  • 2021-07-11
  • 2017-01-30
  • 2013-06-26
  • 1970-01-01
相关资源
最近更新 更多