2016-11-04 12 views
1

インポート時にクラスを定義するcsvがある。いくつかの列は整数クラスです。私が持っている問題は、それらの列の1つに "3"の代わりに "3"を書き込むと、関数全体が機能しなくなるということです。整数列の文字セルをNAに変換する。read.csv

私が彼にして欲しいことは、インポート中にテキストをNAに変換することです。私はあなたがna.strings = ...を使うことができることを見ましたが、それはすべての列に当てはまりますね。私はcsv全体からではなく、ある列から文字を除外したいだけです。

これには簡単な解決法がありますか、または手動でそのような値を各列にチェックしてNAに変換する必要がありますか?

EDIT:追加情報: これは私のコードは次のようになります。

df <- read.csv(text=capture.output(write.csv(d.xxx,row.names=FALSE)), 
        colClasses=d.yyy, 
        header = TRUE) 

d.xxx is a data frame containing the values and 
d.yyy is a list containing "integer","character",etc. in the correct order 

EDIT2:これは私が取得エラーです:

Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, : 
scan() expected 'a real', got '"2"' 
+0

クラスが混在する列がある場合は、 'read.csv'に' colClasses = c( 'integer'、 'character') 'などを指定できます。したがって、 'colClasses'で指定された整数列に '3'があれば、それはNAに変換されます – akrun

+0

' as.numeric() 'でインポートした後に列の型を変更できますか?あなたが文字を持っている場合、それはNAsを生成します。 – Hugo

+0

@akrun thats私がやったこと、期待したことは起こるだろう。代わりに、ファイルをインポートせず、「実際に期待した、2」を返します。 – Pablowa

答えて

1

だけ列を文字列としてインポートし、data.frameの列にas.numeric()を実行します。これは、文字列の要素の実際の数値とNAsの数値のベクトルを返します。

+0

これは回避策かもしれませんが、 "整数"、 "文字"などのリストがユーザによって生成され、read.csv()を使用することが非常に役に立ちましたので、このリストを参照するだけで問題は複雑になります。 しかし、私はas.numeric()を使用する必要が他の方法がないと思います... – Pablowa

関連する問題