2017-08-31 12 views
0

の2つのデータフレームを想定してみましょう:AとBは、次のようなデータを含む:が異なるデータフレームの高速化列を比較

Dataframe: A    Dataframe: B 
    ColA      ColB1  ColB2 
| Dog |     | Lion  | yes 
| Lion |     | Cat  | 
| Zebra |     | Elephant | 
| Bat |     | Dog  | yes 

にはい挿入するために、ColB1の値にコーラの値を比較したいですColB2列の一致の場合。私が実行しているのはこれです:

for (i in 1:nrow(B)){ 
    for (j in 1:nrow(A)){ 
     if (B[i,1] == A[j,1]){ 
      B[i,2] <- "yes" 
     } 
    } 
} 

実際には、私たちは20000行の話をしています。どのようにこれは速くなることができますか?

+0

してください 'dput'あなたの例data.framesを。彼らが現在表示されている方法は役に立ちません。あなた自身で試してみたいのであれば、 '?match'と'%in% '演算子を見てください。 – lmo

+3

ベクトル化!あなたは基本的に応答のために '%in% ' –

答えて

2

あなたはメンバーシップを決定するために%in%演算子を使用することができます。

B$ColB2 <- B$ColB1 %in% A$ColA 

ColB2は、データフレームBColB1の値は、データフレームAColAで発見されたかどうかにTRUE/FALSE依存が含まれています。詳細情報については

は、以下を参照してください。

https://stat.ethz.ch/R-manual/R-devel/library/base/html/match.html

+0

をチェックアウトする必要があります。それとは別に、ループのネストを避けることは可能ですか? –

+2

これはループを必要としません。それは現状どおりに動作します。 – Vince

関連する問題