我正在使用 R 中的 sqldf 包。我想创建一个数据集,其学生 ID 被排除在另一个数据集中。我的代码如下所示:
delete <- sqldf("select distinct ID from A where ...")
B<-sqldf("select * from A where ID not in ('select ID from delete')")
运行代码后,我发现 B 与 A 完全相同。似乎 sqldf 无法识别嵌套的 select 语句。任何建议,将不胜感激!
代码有这些问题:
在显示的代码中实际上根本没有嵌套选择。该语句正在请求所有不等于 string 的 ID 'select ID from delete'
。删除引号。
delete
是一个 SQLite 关键字。为您的 data.frame 使用不同的名称或将名称delete
放在 SQL 语句中的引号中,以便它知道不将其视为关键字。
下次请以可重复的形式陈述问题。请参阅如何制作出色的 R 可重现示例?
进行这三个更改后,我们得到以下内容,其中 A 的 ID 为 1,2,3,4,delete 的 ID 为 1,2,B 的 ID 为 3,4。
library(sqldf)
A <- data.frame(ID = c(1, 1, 2, 3, 4))
delete <- sqldf("select distinct ID from A where ID < 3")
B <- sqldf("select * from A where ID not in (select ID from 'delete')")