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
我正在使用 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