2017-06-26 3 views
1

を変更すると、read.csv/read.tableを、それがbの値read.csv/read.tableを数値

read.table(text="a,b 
1123363730,5000000000000011111",sep=",",header=TRUE) 
#   a     b 
# 1 1123363730 5000000000000011264 

大きすぎる数の値を変更するようですかわった!

read.table(text="a,b 
1123363730,5000000000000011111",sep=",") 
#   V1     V2 
# 1   a     b 
# 2 1123363730 5000000000000011111 

今値が(文字列として)正しい

どのように私は私のcsvファイルで何読み込むことを確認することができ、私はそれは数が大きいにあることと関係していると仮定し、それは非常に迷惑なんです?

+0

恐らく[this](https://stackoverflow.com/q/32339636/324364)の複製。 – joran

+0

おそらく、[bit64](https://cran.r-project.org/web/packages/bit64/bit64.pdf)を使用し、 'read.table'の中の' colCasses'を 'integer64'と指定しますか? – Lyngbakr

+0

答えは実際にはこれと同じくらい簡単です(重複のための提案されたリンクではありません): 'read.table(text =" 5000000000000011111 "、numbers =" no.loss ")' –

答えて

1

大きすぎる整数をインポートしようとしています。これは丸められ、科学的表記で表されます。

あなたは1で、最大の整数の上に行くの効果見ることができます:私は最大の整数がそれぞれ独自のマシンとRの構成に固有のものであることを信じる

> str(.Machine$integer.max) 
int 2147483647 
> str(.Machine$integer.max + 1) 
num 2.15e+09 

を私が間違っている場合(誰かが私を修正してください)。

0
library(bit64) 

tst <- read.table(text="a,b 
        1123363730,5000000000000011111",sep=",", 
        header=TRUE, colClasses = "integer64") 

print(tst$b) 
+0

これに1つの余分なゼロを追加しました。デフォルト値9223372036854775807を与えました。追加されたすべての追加ゼロに対してこの同じ値が与えられます。これは最大の64ビット数です。 – akaDrHouse