2016-01-28 30 views
0

我正在通過使用sqldf將一些data.frame代碼轉換爲SQL。我的目標是使用B中的一列來對數據框A的行進行子集劃分。當A和B不共享任何列名時,這可能嗎?使用sqldf來從不同的數據中的列中的行子集。框架

A = data.frame(a1 = c(1:4), a2 = c(101:104)) 
B = data.frame(b1 = c(1:2), b2 = c(55,56)) 

A[A$a1 %in% B$b1,] 

## a1 a2 
## 1 1 101 
## 2 2 102 

我可以子集A,如果我已經知道B $ b1的值,但這不是非常可擴展的。

sqldf("select * from A where a1 in (1,2)") 

我是否需要一個內部連接和/或是否需要具有相同的列名?

回答

1

試試這個:

fn$sqldf(" select * from A where a1 in (`toString(B$b1)`) ") 

sqldf("select A.* from A join B on A.a1 = B.b1") 
1

我們使用粘貼兩次。連接由逗號分隔的矢量B$b1的元素。然後來連接最終的文本字符串所需:[1] "select * from A where a1 in(1,2)"

sqldf(paste("select * from A where a1 in(", paste(B$b1, collapse = ","), ")")) 

輸出:

a1 a2 
1 1 101 
2 2 102 
相關問題