使用 sqldf 对不同 data.frame 中列的行进行子集化
Use sqldf to subset rows from column in a different data.frame
我正在使用 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)")
我是否需要内部联接and/or是否需要具有相同的列名?
我们用了两次粘贴。连接以逗号分隔的向量 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
试试这个:
fn$sqldf(" select * from A where a1 in ( `toString(B$b1)` ) ")
或
sqldf("select A.* from A join B on A.a1 = B.b1")
我正在使用 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)")
我是否需要内部联接and/or是否需要具有相同的列名?
我们用了两次粘贴。连接以逗号分隔的向量 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
试试这个:
fn$sqldf(" select * from A where a1 in ( `toString(B$b1)` ) ")
或
sqldf("select A.* from A join B on A.a1 = B.b1")