2017-07-14 5 views
0

read_csv()とread.csv()を使用してRにCSVファイルをインポートすると問題が発生します。それらの変数のほとんどは整数です。 read_csv()を使用すると、整数であるいくつかのセルがNAに変換され、次の警告が表示されます。しかし、これらのセルも整数なので、なぜそれが間違っているのかわかりません。Rでread_csv()解析の失敗:整数をNAに変換する

10487 parsing failures. 
row col expected  actual            
3507 X27 an integer 2946793000 
3507 X46 an integer 5246675000 
3508 X8 an integer 11599000000 
3508 X23 an integer 2185000000 
3508 X26 an integer 2185000000. 

df [3507,27]にアクセスすると、NAと表示されます。また、X27、X46、およびX8はすべて整数なので、関数がほとんどの行で機能する理由はわかりませんが、それらの行では機能しません。

ただし、私はread.csv()を使用しています。それは動作し、2946793000を返します。 なぜ、これらの2つの関数が異なる動作をするのか教えてください。

+2

'read_csv'は、データの最初の行を見て、その列のデータ型を推測します。特に大量のデータセットでは、間違って推測されることがあります。たとえば、私は 'readr'がブール値であると考えられるジェンダー列を持つデータセットを持っていました(すべての最初の行は" F "でした)。最初のエラーが発生した行までファイルの 'head'を読み込み、文字列の書式があるかどうかを確認してください。問題のある列を文字として読み取って数値に変換するよう強制することもできます。 –

答えて

1

これらの数値は大きすぎて整数に収まらない。

.Machine$integer.max 
[1] 2147483647 
+0

...列クラスを指定することで整数ではなく数字として読み込むことも、文字として読み込んでCRANの大きな整数パッケージを使うこともできます(名前は思いつかないが私はいくつかあると思う)。 – joran

+1

大きな整数については、[link](https://stackoverflow.com/questions/32368555/exactly-storing-large-integers)を参照してください。 –

0

他にも述べたように、read_csvは最初の1000行を使用して列の種類を推測します。データの最初の1000行が整数なので、すべてのデータのためにそのように読み込まれるように思えます。その後、整数クラスが扱うことのできない大きな整数がデータに遭遇します。行1001に整数以外の値があれば同様の問題に遭遇します。いくつかの例:

#build text data - read_csv uses the first 1000 rows to guess column types 
csv_ok <- "column_header" 

for(t in 1:1000){ 
    csv_ok <- paste(csv_ok, t ,sep="\n") 
} 

#add a "problematic" double to row 1001: 
csv_w_dbl <- paste(csv_ok, 1000.25, sep="\n") 

#add a "problematic" integer: 
csv_w_bigint <- paste(csv_ok, .Machine$integer.max+1, sep="\n") 

#can't parse these without specifying column type 
read_csv(csv_w_dbl) 
read_csv(csv_w_bigint) 

#can parse these 
read_csv(csv_ok) #all integers 
read_csv(csv_w_dbl, col_types="d") #specify double as col type 
read_csv(csv_w_bigint, col_types="d") #specify double as col type to handle big integers 
0

私はおそらくRとopen_csvにメモリの問題があると思います。あなたが限界に達すると、奇妙なことが起こります。あなたのRがどれだけ取っているかを近似することは整数の長さに依存します。あなたの170万の観測と27のコラムについては、Rからメモリヒープで10GBを打っていると思います。ここではhttps://rpubs.com/msundar/large_data_analysisです。大きなcsvデータセットでopen.csv()を使用する方法についてのアドバイスがあります。

Rのメモリを理解することは複雑な課題です。次に例を示します:

> library(pryr) 
> object_size(c(1L:11L)) 
88 B 
> object_size(c(1L)) 
48 B 
> object_size(c(1L, 2)) 
56 B 
> object_size(c(1L, 2, 3, 4 ,5, 6, 8)) 
104 B 
関連する問題