【问题标题】:Correct number of decimal places reading in a .csv在 .csv 中读取的正确小数位数
【发布时间】:2013-07-23 04:51:13
【问题描述】:

我有一个 .csv,其中一列包含有 7 位小数的数字,例如:-117.2403266

当我将.csv 读入 R 时,它只显示该列的 4 位小数,例如:-117.2403。或者也许它们都在那里,但是当我打印时它只显示四位小数?

我认为这可以在 read.csv() 函数的参数中解决,但它没有说明小数位。

【问题讨论】:

  • 参见optionsdigits 条目。
  • 你也可以使用format(Data, digits=n)来检查你的数据框是否真的被正确读取了。

标签: r csv decimal


【解决方案1】:

read.csv 没有截断或舍入,但您的print.data.frame 函数仅显示options() 中指定的精度值。试试:

 print(dfrm, digits=10)

> dfrm<- data.frame(test=-117.2403266)
> print(dfrm)
       test
1 -117.2403
> print(dfrm, digits=10)
          test
1 -117.2403266

按照建议使用format 将表明精度没有丢失,但它会返回一个字符向量,因此它可能不适合在需要数值时进行赋值。

编辑 2 年前的帖子:这个主题可能会提出一个问题,即当整数大于 .Machine$integer.max #[1] 2147483647 时如何导入整数,因为它们现在可以在内部完全存储为“数字”横坐标值,因此最大值为 2^52(或 2^53-1,我忘记了)。当这些是从基于scan 的函数中读取的(read.*-family 中的所有值都是 0f)时,您需要声明为“数字”而不是“整数”:

> str( scan(text="21474836470", what=integer()))
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
  scan() expected 'an integer', got '21474836470'
> str( scan(text="21474836470", what=numeric()))
Read 1 item
 num 2.15e+10
> str( read.table(text="21474836470", colClasses="integer"))
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
  scan() expected 'an integer', got '21474836470'
> str( read.table(text="21474836470", colClasses="numeric"))
'data.frame':   1 obs. of  1 variable:
 $ V1: num 2.15e+10

如果您没有为“what”指定类型或模式,scan 将假定 numeric() 并且它会成功。

【讨论】:

  • 这太好了,谢谢!我想知道是否是 .csv 被不正确地读取或正在打印的问题。感谢您的澄清!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 2019-11-13
相关资源
最近更新 更多