PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

écrire une table dans la base de données avec dplyr

Bien que je sois entièrement d'accord avec la suggestion d'apprendre SQL, vous pouvez profiter du fait que dplyr n'extrait pas de données tant qu'il n'y est absolument pas obligé et construit la requête à l'aide de dplyr , ajoutez le TO TABLE clause, puis exécutez l'instruction SQL en utilisant dplyr::do() , comme dans :

# 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"))

Vous pourriez même écrire une petite fonction qui fait ceci :

to_table  <- function(qry,tbl)
    dplyr::do(paste(unclass(qry$query$sql), "TO TABLE",tbl))

et dirigez la requête vers cette fonction comme ceci :

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')