2016-05-11 14 views
0

を保存します。はrow.names/col.namesはR内の別のデータフレームのrow.names/col.namesから文字が含まれている場合、全体の行/列を削除し、私は次のように<strong>NX 1</strong><code>df_vector</code>ベクトルを持っている

Var1:M1 2.5 
Var1:M2 3.8 
Var1:M3 NaN 
Var1:M4 9.3 
Var2:M1 0.1 
Var2:M2 2.3 
Var2:M3 8.8 
Var2:M4 NaN 

は、その後、私はdf_matrix n×nの行列があります。私は何をしたいか

 Var1:M2 Var1:M3 Var1:M4 Var2:M1 Var2:M2 Var2:M3 Var2:M4 
Var1:M1 46900 788888 700000 490603 479063 6468000 649111 
Var1:M2 52823 543189 431863 134696 413000 4980000 550690 
Var1:M3 34343 543199 543169 413000 479006 4689703 567000 
Var1:M4 56655 745893 134000 130000 463090 9806300 790643 
Var2:M1 87676 413596 156000 546970 310000 9730000 700000 
Var2:M2 67786 124397 134680 546300 146900 1312600 669000 
Var2:M3 45332 417933 203333 131588 137900 4690530 978000 
Var2:M4 32422 660796 314796 786000 479000 7690000 796080 

することです:df_vectorの行はNaN値は、そのを使用している場合row.nameを検索してdf_matrixで検索し、df_vectorにNaN値があるrow.nameと同じ名前の行および/または列をすべて削除します。同時に削除された列/行を同じ順序で新しいデータフレームに保存します。したがって、この特定の例では、df_vector Var1:M3およびVar2:M4にはNaN値があるため、Var1:M3およびVar2:M4という名前のdf_matrix行は完全に削除され、Var1:M3という名前の列Var2:M4も完全に削除する必要があります。これらの削除された行と列は、df_matrixと同じ形式で新しいデータフレームを作成する必要があります。

これを達成する最も良い方法は何ですか?私の元のデータセットは10,000 x 10,000の行列なので、ifとforを書くときには非常に遅く、コンパイルに非常に長い時間がかかりました。

+1

ようこそ。あなたが試したコードを遅くても追加できますか?一般的に予想される質問の形式は、目的の結果を記述することに加えて、試した内容を表示することです。 – dww

答えて

0

ループを避ける方が速いと思います。最も簡単な方法は2つのステップでこれを行うことです。

# remove rows and then remove columns 
df_matrix[is.nan(df_vector[,1]),] <- NULL 
df_matrix <- df_matrix[,!is.nan(df_vector[,1])] 

上記のコードは、列名と行名が2つのデータフレーム内の順序と正確に一致しない場合、期待どおりに機能しない可能性があります。その場合は、df_vectorから行の名前を取得し、特定の行と列を保持するために%in%を使用します。削除されたデータを保持する第2の部分については、基本的には無関係な行と列の束を持つ既存のdf_matrixのコピーであるため、必要なものは明確ではありません。余分なフィラーセルにはどのような価値がありますか?

+0

これはうまくいった。私は 'df_matrix < - df_matrix [、!is.nan(df_vector [、1])]'と 'df_matrix < - df_matrix [!is.nan(df_vector [、1])]]を試しました。これで、私が望む行と列が削除されました。私の質問の2番目の部分では、上記の条件に合致するこれらの値から新しいデータフレーム/行列を作成したい、つまりdf_matrixから削除される行/列の中から新しいデータフレームをnewdfにすることを意味しました。 – DoeNoe

関連する問題