2015-10-23

Borrar registros de un data frame con sqldf en R

Title

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

Nube de datos