正确读取.csv中的小数位数

时间:2013-07-23 21:51:05

标签: r csv decimal

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

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

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

1 个答案:

答案 0 :(得分:21)

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.* - 族一样),您需要声明为'numeric'而不是'integer':

> 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()并且它会成功。