Problema
Nuestro objetivo es borrar del siguiente data frame aquellos registros cuyo ID sea 8254700, 8641472 y 9022163.
df <- data.frame(ID = c(8254700, 8641472, 9022163, 1111111, 2222222 ),
field = c(1, 2, 3, 4, 5))
ID field
1 8254700 1
2 8641472 2
3 9022163 3
4 1111111 4
5 2222222 5
Solución
Para borrar esos tres registros necesitamos añadir a la sentencia iniciam "SELECT * FROM df" tras la sentencia de borrado o devolverá NULL , porque sqldf siempre devuelve el resultado de las sentencias de SQL dadas y DELETE no devuelve ningún resultado.
library(sqldf)
sqldf(c("DELETE FROM df WHERE ID IN (8254700, 8641472, 9022163)", "SELECT * FROM df"))
Resultado
ID field
1 1111111 4
2 2222222 5
Notas
Si los IDs están en un vector separado, ids, entonces podemos obtener el mismo resultado con:
ids <- c(8254700, 8641472, 9022163)
fn$sqldf(c("DELETE FROM df WHERE ID IN (`toString(ids)`)", "SELECT * FROM df"))
o para examinar los resultado intermedios:
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
Entradas relacionadas
Referencias
No hay comentarios:
Publicar un comentario