使用sqldf对不同data.frame中列的行进行子集化

时间:2016-01-28 17:30:49

标签: sql r sqldf

我正在使用sqldf将一些data.frame代码翻译成SQL。我的目标是使用B中的列对data.frame A的行进行子集化。当A和B不共享任何列名时,这是否可行?

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

如果我已经知道B $ b1中的值,我可以对A进行子集化,但这不是很可扩展。

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

我是否需要内部联接和/或是否需要具有相同的列名?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

试试这个:

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

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