2016-11-21 9 views
0

新しいデータフレームを作成する必要があります。新しいデータフレームは2番目のデータにない最初のデータフレームの各行フレーム。私はこの方法でそれを可能にするマージ関数を使用していくつかのコードhereを見つけました。結果のマージが結果を持っている場合は、基本的に、その行はデータフレームであると私は新しいものにそれを追加しないでください:R 2つのデータフレーム間で一意の行から新しいデータフレームを効率的に作成する

for (j in 1:nrow(my.df)) { 
    if(nrow(merge(my.df[j,],sample.df))==0) { 
     test.df <- rbind(test.df,my.df[j,]) 
    } 
} 

問題は、ループのために非常に遅いことです。私が持っている制約を考慮して、データフレームを構築するより効率的な方法はありますか?

A B class 
1 2 x 

test.df

my.df

A B class 
1 2 x 
2 3 y 
3 4 z 

sample.df

A B class 
2 3 y 
3 4 z 
+1

外観と '?dplyr :: anti_joinを(得るためにlibrary(data.table)data.tablesに変換することができます'以上の助けを借りて、理想的な出力を持つ再現可能な例を投稿してください:) – Nate

+0

コードは再現可能で、2つのデータフレームが必要で、探している出力が得られます(コードはそのまま動作します)。私はもっ​​と速い方法を探しています。 – xjtc55

+0

'my.df'はどのように見えますか? 'sample.df'についてどうですか? – Nate

答えて

2

は、我々がanti_join()を使用することができますlibrary(dplyr)を使用するようになります。

anti_join(my.df, sample.df) 
# Joining, by = c("A", "B", "class") 
# A B class 
# 1 3 4  z 
# 2 2 3  y 

@Gregorで述べたように、また、あなたのdata.framesは)いくつかの余分な `?dplyr :: setdiff()`で機敏

+0

これは機能します。顕著なスピードアップがありました。今は十分です。私はもっ​​と速くテーブルに変換しようとします。 – xjtc55

+0

は、#joinging、by ....メッセージを抑制する方法はありますか? – xjtc55

+1

yes 'anti_join(...、by = c(" variable1、variable2)) ''を指定した場合、どの列が一致するかを示す警告が表示されます。デフォルトでは、 data.frames – Nate

関連する問題