sqldf 删除观察故障

sqldf deleting observations glitch

我正在使用 sqldf 删除如下所示的三个观察结果。

del_query <- sprintf("DELETE from data_table
                      where ID_NUMBER IN (%s)",
                     paste((
                                      '8254700',
                                      '8641472',
                                      '9022163'
                                      ), collapse=", "))

sqlQuery(myconn, del_query)

我在执行查询时没有看到任何错误。我也没有得到正确的结果。它只是删除 ID 为 8254700 的第一个观察值,其余两个 ID 为 8641472 或 9022163 的观察值仍然存在。想知道我做错了什么......我需要所有三个观察结果......非常感谢大家的帮助。

假设你有这个数据框:

df <- data.frame(ID = c(8254700, 8641472, 9022163, 1111111, 2222222 ), 
                 field1 = c(1, 2, 3, 4, 5))

给予:

> df
       ID field1
1 8254700      1
2 8641472      2
3 9022163      3
4 1111111      4
5 2222222      5

要删除这三个记录,您需要添加 "SELECT * FROM df" 否则它将 return NULL 因为 sqldf 总是 return 的结果SQL 给出的语句和 DELETE 没有 return 结果。

library(sqldf)
sqldf(c("DELETE FROM df WHERE ID IN (8254700, 8641472, 9022163)", "SELECT * FROM df"))

输出:

       ID field1
1 1111111      4
2 2222222      5

如果 ID 在一个单独的向量中,ids,那么试试这个(输出相同):

ids <- c(8254700, 8641472, 9022163)
fn$sqldf(c("DELETE FROM df WHERE ID IN (`toString(ids)`)", "SELECT * FROM df"))

或检查中间结果:

idString <- toString(ids)
idString
## [1] "8254700, 8641472, 9022163"

sql <- fn$identity(c("DELETE FROM df WHERE ID in ($idString)", "SELECT * FROM df"))
sql
## [1] "DELETE FROM df WHERE ID in (8254700, 8641472, 9022163)"
## [2] "SELECT * FROM df"   

sqldf(sql)
##            ID field1
## 1 1111111      4
## 2 2222222      5