web-dev-qa-db-ja.com

.csvで読み取る小数点以下の桁数を修正する

列の1つに小数点以下7桁の数値が含まれている.csvがあります(例:_-117.2403266_)。

_.csv_をRに読み込んでいるとき、その列の小数点以下4桁しか表示されません(例:_-117.2403_)。または、それらはすべてそこにあるかもしれませんが、私が印刷すると、小数点以下4桁しか表示されませんか?

これはread.csv()関数の引数内で解決できるのではないかと思いましたが、小数点以下の桁数については何も述べていません。

15
Misc

_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ベースの関数から読み込まれる場合(すべて0f _read.*_-ファミリと同様)、「整数」ではなく「数値」として宣言する必要があります。

_> 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」のタイプまたはモードを指定しない場合、scannumeric()を想定し、成功します。

22
42-