web-dev-qa-db-ja.com

多数を保存する

最初の列にバーコードがあるCSVファイルを読み込もうとしていますが、Rがそれをdata.frameに取り込むと、16655350046611.67E+12に変換されます。

この数値を整数形式で保存する方法はありますか? "double"のクラスを割り当てようとしましたが、うまくいきませんでした。また、"character"のクラスを割り当てることもできませんでした。 1.67E+12形式になったら、整数に変換しようとすると167000000000が返されます。

12
James

「1.67E + 12形式」ではなく、デフォルトを使用して完全に印刷されるわけではありません。 Rはそれをうまく読んでいて、整数がそこにあります。

x <- 1665535004661
> x
[1] 1.665535e+12
> print(x, digits = 16)
[1] 1665535004661

ほら、数字はずっとそこにあった。あなたが本当に多数の桁を持っていない限り、それらは失われません。持ち込んだものでの並べ替えは正常に機能し、名前を暗黙的に入力する代わりに、数字オプションを指定してprint()を明示的に呼び出してdata.frameを表示できます。

14
John

コメントであなたが言ったことを拾い上げて、read.table()colClassesを指定することにより、テキストを文字として直接インポートすることができます。例えば:

_num <- "1665535004661"
dat.char <- read.table(text = num, colClasses="character")
str(dat.char)
#------
'data.frame':   1 obs. of  1 variable:
 $ V1: chr "1665535004661"
dat.char
#------
             V1
1 1665535004661
_

あるいは(そして他の用途のために)、options()の下でdigits変数を指定することができます。デフォルトは7桁で、許容範囲は1〜22です。明確にするために、このオプションを設定しても、基になるデータが変更または変更されることはなく、印刷時に画面に表示される方法を制御するだけです。 _?options_のヘルプページから:

_controls the number of digits to print when printing numeric values. It is a suggestion only.
Valid values are 1...22 with default 7. See the note in print.default about values greater than
15.
_

これを説明する例:

_options(digits = 7)
dat<- read.table(text = num)

dat
#------
            V1
1 1.665535e+12

options(digits = 22)
dat
#------
             V1
1 1665535004661
_

これを完全に具体化し、グローバル設定を設定することが望ましくない場合を考慮して、print(foo, digits = bar)の引数として数字を直接指定できます。これについて詳しくは、_?print.default_をご覧ください。これはジョンが彼の答えで説明していることなので、そのニュアンスを明らかにするために彼に信用を与えるべきです。

13
Chase

colClasses = "character"を使用してみてください

read.csv("file.csv", colClasses = "character")

http://stat.ethz.ch/R-manual/R-devel/library/utils/html/read.table.html

このリンクをご覧ください。

10
rockswap

?is.integerページから:

「Rの現在の実装では整数ベクトルに32ビット整数を使用しているため、表現可能な整数の範囲は約+/- 2 * 10 ^ 9に制限されていることに注意してください。

1665535004661L> 2 * 10 ^ 9 [1] TRUE

パッケージRmpfrが必要です。

library(Rmpfr)
x <- mpfr(15, precBits= 1024)
5
42-

int64パッケージを見てください: 64ビットデータをRに持ってくる

4
Alex Reynolds

この値に対して算術演算を実行していないため、文字が適切です。 colClasses引数を使用して、列ごとにさまざまなクラスを設定できます。これは、すべての文字を使用するよりもおそらく優れています。

data.csv:

a,b,c
1001002003003004,2,3

文字を読み取り、次に整数を読み取ります。

x <- read.csv('test.csv',colClasses=c('character','integer','integer'))
x
                 a b c
1 1001002003003004 2 3


mode(x$a)
[1] "character"

mode(x$b)
[1] "numeric"
3

read.csvを実行しているときに、数字の引数を使用できます。したがって、たとえば:

read.csv(x, sep = ";", numerals = c("no.loss")) Where x is your data.

これにより、長整数の値が保持され、データをインポートするときにそれらの表現が混乱することはありません。

3
Aditi Kumar

私はすべてのスクリプトの開始時にoptions(scipen = 9999999999)を使用する傾向があります。科学的形式ではなく、小数点以下の桁数の多い数値を出力します。 '9'の数を、表示する小数点以下の桁数に変更できます。グローバルオプションでこれを設定する方法はありますが、その方法は100%わかりません。

0
hanm