14

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

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

4

8 に答える 8

18

「1.67E+12 フォーマット」ではありません。デフォルトを使用して完全に印刷されるわけではありません。R はそれを問題なく読み取っており、整数はそこにあります。

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

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

于 2012-05-23T03:17:00.810 に答える
15

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

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

別の方法として (およびその他の用途で)、digits変数を の下に指定することもできますoptions()。デフォルトは 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ください。これはジョンが彼の答えで説明していることなので、そのニュアンスを明らかにするために彼にクレジットを与えるべきです.

于 2012-05-23T00:39:31.773 に答える
10

colClasses="character" で作業してみてください

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

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

このリンクを見てください。

于 2012-05-23T00:31:59.063 に答える
6

?is.integer ページから:

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

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

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

library(Rmpfr)
x <- mpfr(15, precBits= 1024)
于 2012-05-23T02:06:04.353 に答える
4

int64パッケージを見てみましょう: Bringing 64-bit data to R .

于 2012-05-23T00:03:27.580 に答える
3

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

データ.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"
于 2012-05-23T02:42:04.947 に答える