0

read.tableデータファイルの読み取りに使用しています。次のエラーが発生しました:

scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
scan() のエラーは、'a real' を期待していましたが、'true' を取得しました

データ ファイルに何らかのエラーがあることを意味することはわかっています。問題は、それがどこにあるのかをどうやって見つけるかということです。エラー メッセージでは、どの行に問題があるかがわかりませんでした。見つけるのが難しいです。または、これらの行をスキップするにはどうすればよいですか?

これが私のRコードです:

data<-read.csv("/home/jianfezhang/prod/conversion_yaap/data/part-r-00000",
                   sep="\t",
                   col.names=c("site",
                               "treatment",
                               "mode",
                              "segment",
                              "source",
                              "itemId",
                              "leaf_categ_id",
                              "condition_id",
                              "auct_type_code",
                              "start_price_lstg_curncy",
                              "bin_price_lstg_curncy",
                              "start_price_variance",
                              "start_price_mean",
                              "start_price_media",
                              "bin_price_variance",
                              "bin_price_mean",
                              "bin_price_media",
                              "is_sold"),
                   colClasses=c(rep("factor",5),"numeric",rep("factor",3),rep("numeric",8),"factor")
                   );
4

1 に答える 1

3

表示されるエラーは、colClasses引数が原因で発生します。ファイル内の一部の値が、指定したデータ型と一致しません。

colClassesほとんどの場合、このようなものに遭遇します。おそらく、引数にカウントの問題があっただけです。たとえば、

colClasses=c(rep("factor",5),"numeric", rep("factor",4), rep("numeric",7),"factor")

デフォルト値の代わりに。これは、ファイルの最初の行の内容を指定したデータ型と注意深く比較することで簡単に確認できます。

これで問題が解決しない場合は、予期しないデータ型が間違っている可能性があります。シンプルだが時間のかかるアプローチは、colClasses引数を削除し、最初に特定のオプションなしでファイル全体を読み取ることです。おそらく追加stringsAsFactors=FALSEして、文字値のみを取得します。これはおそらくうまくいくはずです。

次に、次のように、各列を 1 つずつ変換しようとする場合があります。

data$itemId <- as.numeric(data$itemId)

次に、結果のNA値を確認します。これは、 で簡単に実行できますsummary(data$itemId)。値を取得したNA場合は、呼び出しwhich(is.na(data$itemId))て行番号を取得し、元のファイルNAが実際に有効かどうか、またはデータに問題があるかどうかを確認できます。

ほとんどの場合、この方法で問題を絞り込むことができます。

ただし、ファイルに多くの列がある場合、これはすぐに多くの作業になります....

于 2013-06-04T07:15:06.693 に答える