2016-11-14 7 views
0

Juliaに値のないファイル( "NA")が必要です。私は、ファイルを読み取るために使用してい
コマンドは次のとおりです。Juliaで "NA"を扱う方法

file = readdlm("FILE_NAs.txt", header=false)

問題は、私は「NA」のため、(行列の乗算のような)数学の方程式で、このファイルを使用することができないということです。
パッケージ「DataArray」と関数「dropna(file)」を使用しようとしましたが、機能しませんでした。
だから、私はそれらの "NA"の値を無視したり削除したりしたいと思います。ここで

がロードされたファイル(スペース区切り)のサンプルです:

"Ind1" "NA" "NA" "NA" "NA" "NA" "NA" 2 "NA" "NA" 
"Ind2" "NA" "NA" "NA" "NA" "NA" "NA" 2 "NA" "NA" 
"Ind3" "NA" "NA" "NA" "NA" "NA" "NA" 1 "NA" "NA" 
"Ind4" "NA" "NA" "NA" "NA" "NA" "NA" 2 "NA" "NA" 
"Ind5" 0  0  0  0  0  0  1 0  0 
"Ind6" 1  0  0  0  1  1  2 1  1 
"Ind7" 1  0  0  0  1  1  2 1  1 
"Ind8" 0  0  0  0  0  0  2 0  0 
+1

は引用符で囲まれていますか?データファイルのスニペットと最小の実例を教えてください。区切られたファイルまたは 'DataFrame'としてロードし、単に" NA "文字列に対してサブセット化することができますか? –

+0

はい、別の関数を使用してファイルを読み込むことができます。正直言って、ファイルをロードする別の関数を試したが、この関数(readdlm)と同じようにファイルを処理できなかった。 –

答えて

1

NAタイプを明示的に線形代数演算を毒殺するように設計されているので、あなたはそれらでNAで配列を掛けるべきではありません。

私はあなたが単にNAを含む行を削除したい場合は、実行する最も簡単事が

y = DataFrames.na_omit(x)[1] 
を呼び出すために、おそらくです

using DataFrames 
x = readtable("FILE_NAs.txt", header = false, separator = ' ') 

のようなものを使用してデータをロードすることを想定しています

NAを含む行がパージされた新しいDataFrameが生成されます。あなたのサンプルファイルから数値データを抽出する場合は、

z = convert(Matrix{Int}, y[2:end]) 

のようなものを使用してください。 DataFrameは円柱のベクトルDataArraysのように振る舞いますので、ベクトルのようにyをインデックスできます。 DataFrameNAエントリをMatrixに変換すると、failになります。

代わりに列でパージしたい場合は、NAの列を決定します。これを行う方法の1つは、達人がこれを行うための簡単な方法を知っている可能性があり

# get a Bool array of NA positions 
y = array(map(isna, eachcol(x))) 

# get a vector indexing columns with NA in them 
z = vec(!reducedim(|, y, 1)) 

# now extract columns of x with no missing data 
x[z] # <-- only has rows x1, x8 

DataFrame経由です。

+0

こんにちは。このファイルを配列や行列に変換するには、ある程度のオプションがあります。 'readtable'を使用して、' findin'のような関数を含むスクリプトの残りの部分を使用することはできません: 'tmp = file [findin(file、file2 [:、1])、:]'。出来ますか?ありがとう。 –

+0

私はそのコードが何をしているのか分かりません。 'findin'はインデックスを必要としますか? 'DataArray'オブジェクト(拡張子は' DataFrame')は、操作があまりにも毒であるので、注意深い索引付けが必要です(https://github.com/JuliaStats/DataArrays.jl/issues/207)。 'Matrix'への変換については、編集された応答を参照してください。 –

+0

まだ動作していません:/。 'DataFrames.na_omit(x)[1]'のコマンドは次元が '30×49620'、' y'が '0x49620 'なので、正しく動作していないと思います。 –

関連する問題