2016-04-29 11 views
-2

fread("Dummy data.CSV", sep = "~")で:データが正しくdata.table使用して読まれていない::関数fread

バンプ列22をデータ行19257上の文字を入力するには、フィールドが 「非該当」が含まれています。以前にこの列の値を から論理値、整数値、または数値に戻すと、 の文字は無損失である可能性があります。例えば、 '00'と '000'が発生してから になると、 ',,'と ' '、NA 'の扱いに矛盾が生じる可能性がありますバンプ)。これが の場合は、この カラムの 'colClasses'を 'character'に再設定してください。列の種類の検出では、最初の5行、つまり の中5行と最後の5行が使用されますので、このメッセージ は非常にまれである必要があります。 datatable-helpに報告する場合は、再度実行して にverbose = TRUEの出力を含めてください。

どうすれば解決できますか?

+4

警告を読んだことがありますか?それはかなり明確です。 – Arun

答えて

2

これはエラーではなく警告です。 freadは、ファイルの先頭、中央、最後を調べて、列のデータ型を推測します。その後、ファイル全体を読むとき、以前に決定されたデータ型に適合しない値にバンプする可能性があります。あなたのケースでは、列22は論理、整数、または数値として推測されていましたが、文字列 "NOT APPLICABLE"が含まれていました。したがって、列全体が文字型に変換されました。 freadは、データ型が通常期待するものではないことを警告します。

1

実際、これも同様の回答かもしれません。

@ paljenczyさんの回答は、なぜ警告が表示されたのかを完全に説明しています。na.strings = c("NA", "NOT APPLICABLE")を使用すると、このフィールドをNAにすることができます。そうでない場合は、colClasses = list(character = 22)を追加して列全体を文字として読み取ってから、必要な処理を行います。

編集:この「NOT APPLICABLE」の値をNAに設定することに関するコメントは1つだけです。適用できない情報は、NAを使用して解読するか、または列全体をlogical,integerまたはnumericにキャスティングすることです。私のアプローチは、col 22の対応する値が数字として与えられたのか「NOT APPLICABLE」が与えられたのかを示す新しいバイナリ列を作成してから、すべての列22を任意のフォーマットにキャストすることです。

+0

コロカスが働いた。ちょうど私は4つの変数を持っており、そのうちの1つは数値なので、fread(変数の型を自動的に検出する)を使用することで、数値変数をinteger.forとして変換することができます。整数変数として数値変数をインポートします。 –

+0

'colClasses()'を 'integer = colNum'と組み合わせて使用​​すると、正確さが失われます(例:http://stackoverflow.com/questions/11638303/how-to-convert-num-to-int-in-r )。そして、これがうまくいけば、あなたは新しいものを必要としないという印をつける答えを受け入れることができます。 –

関連する問題