2017-08-31 90 views
0

更快列讓我們採取兩種dataframes:A和B包含類似以下數據:比較不同dataframes

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" 
     } 
    } 
} 

實際上我們正在談論abaout 20000行。這怎麼會變得更快?

+0

請'dput'你例子data.frames。他們目前顯示的方式沒有幫助。如果你想自己嘗試一下,看看'?match'和'%in%'操作符。 – lmo

+3

矢量化!你基本上需要檢查'%%' –

回答

2

可以使用%in%運營商以確定成員:

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

ColB2將包含TRUE/FALSE依賴於數據幀BColB1值是否在數據幀AColA被發現。

欲瞭解更多信息,請參閱:

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

+0

感謝您的答覆。除此之外,是否有可能避免Loop的嵌套? –

+2

這不需要循環。它按原樣工作。 – Vince