Hoewel ik het van harte eens ben met de suggestie om SQL te leren, kun je profiteren van het feit dat dplyr
haalt geen gegevens op totdat het absoluut moet en bouwt de query op met behulp van dplyr
, voeg de TO TABLE
. toe clausule, en voer vervolgens de SQL-instructie uit met behulp van dplyr::do()
, zoals in:
# CREATE A DATABASE WITH A 'FLIGHTS' TABLE
library(RSQLite)
library(dplyr)
library(nycflights13)
my_db <- src_sqlite("~/my_db.sqlite3", create = T)
flights_sqlite <- copy_to(my_db, flights, temporary = FALSE, indexes = list(
c("year", "month", "day"), "carrier", "tailnum"))
# BUILD A QUERY
QUERY = filter(flights_sqlite, year == 2013, month == 1, day == 1) %>%
select( year, month, day, carrier, dep_delay, air_time, distance) %>%
mutate( speed = distance / air_time * 60) %>%
arrange( year, month, day, carrier)
# ADD THE "TO TABLE" CLAUSE AND EXECUTE THE QUERY
do(paste(unclass(QUERY$query$sql), "TO TABLE foo"))
Je zou zelfs een kleine functie kunnen schrijven die dit doet:
to_table <- function(qry,tbl)
dplyr::do(paste(unclass(qry$query$sql), "TO TABLE",tbl))
en pijp de query als volgt in die functie:
filter(flights_sqlite, year == 2013, month == 1, day == 1) %>%
select( year, month, day, carrier, dep_delay, air_time, distance) %>%
mutate( speed = distance / air_time * 60) %>%
arrange( year, month, day, carrier) %>%
to_table('foo')