.csv ファイルを読み取ると先頭のゼロが削除されることに気付きましたが、一部のファイルでは、read.csv で colClasses を明示的に設定しなくても先頭のゼロが維持されます。一方、私を混乱させているのは、他の場合では先行ゼロを削除することです。だから私の質問は: read.csv が先頭のゼロを削除するのはどのような場合ですか?
2 に答える
基本的に、マニュアルからの@GregSnowの回答の補足です。
からのすべての引用?read.csv
:
colClasses が指定されていない限り、すべての列は文字列として読み取られ、次に type.convert を使用して、必要に応じて論理、整数、数値、複素数、または (as.is に応じて) 係数に変換されます。引用符は (デフォルトで) すべてのフィールドで解釈されるため、「42」のような値の列は整数列になります。
また:
データ列の数は、入力の最初の 5 行を調べることによって決定されます...
最初read.csv
の 5 行を見て、そこから列がnumeric
/であるかどうかを推測しinteger
、それ以外の場合はそのまま保持しますcharacter
(したがって、先頭の を保持し0
ます)。
さらに詳細に興味がある場合は、 と のコードを調べることをお勧めします。edit(read.csv)
これedit(read.table)
は長いですが、関数が実行するすべてのステップを詳しく説明しています。
最後に、余談ですが、一般的に次のように指定することをお勧めしますcolClasses
。
colClasses が 6 つのアトミック ベクトル クラスの 1 つとして指定されている場合、使用されるメモリは少なくなります。これは、多くの個別の数値を取る列を読み取る場合に特に当てはまります。それぞれの個別の値を文字列として保存すると、整数として保存する場合の最大 14 倍のメモリが必要になる可能性があるためです。
ただし、メモリ使用量/速度が本当に気になる場合は、fread
fromdata.table
;を使用する必要があります。それでも、指定colClasses
するとスピードアップします。