Problema
Supongamos que tenemos los siguientes data frames.
#A
a1 a2
1 1 101
2 2 102
3 3 103
4 4 104
#B
a1 a2
1 1 101
2 2 102
3 3 103
4 4 104
A <- data.frame(a1 = c(1:4), a2 = c(101:104))
B <- data.frame(b1 = c(1:2), b2 = c(55,56))
Deseamos obtener el siguiente subconjunto de filas del data frame A, en el que la columna A$a1 contenga los elementos de la columna B%b1 del data frame B. Pero en lugar del paquete base, como hacemos a continuación, queremos emplear el paquete sqldf.
A[A$a1 %in% B$b1, ]
a1 a2
1 1 101
2 2 102
Solución
Usamos la función paste dos veces. Para concatenar los elementos del vector B$b1 separado por comas, y después para concatenar la cadena de texto deseada: [1] "select * from A where a1 in( 1,2 )"
library(sqldf)
sqldf(paste("select * from A where a1 in(", paste(B$b1, collapse = ","), ")"))
Otras dos alternativas propuestas por G. Grothendieck son:
# 1
fn$sqldf(" select * from A where a1 in ( `toString(B$b1)` ) ")
# 2
sqldf("select A.* from A join B on A.a1 = B.b1")
Resultado
a1 a2
1 1 101
2 2 102
Referencias
No hay comentarios:
Publicar un comentario