Using Databases using R.

See the RSQLite website.

library(tidyverse)
library(dplyr)
library(dbplyr)
library(RSQLite)
library(DBI)
library(beepr)
library(nycflights13)

In memory databases

mtcars data in an sqlite db

con <- dbConnect(RSQLite::SQLite(), ":memory:")
Error in dbConnect(RSQLite::SQLite(), ":memory:") : 
  could not find function "dbConnect"

iris

con2 <- dbConnect(RSQLite::SQLite(), ":memory:")

dbListTables(con2)

dbWriteTable(con2, "iris", iris)
dbListTables(con2)
dbListFields(con2, "iris")
dbReadTable(con2, "iris")
res <- dbSendQuery(con2, "SELECT * FROM iris")
dbFetch(res)
dbClearResult(res)
dbDisconnect(con2)

flights

con3 <- dbConnect(RSQLite::SQLite(), ":memory:")

dbListTables(con3)

copy_to(con3, nycflights13::flights, "flights",
  temporary = FALSE, 
  indexes = list(
    c("year", "month", "day"), 
    "carrier", 
    "tailnum",
    "dest"
  )
)

dbListTables(con3)
dbListFields(con3, "flights")
dbReadTable(con3, "flights")
res <- dbSendQuery(con3, "SELECT * FROM flights WHERE day=1")
dbFetch(res)
dbClearResult(res)
dbDisconnect(con3)

Using dplyr.

con4 <- dbConnect(RSQLite::SQLite(), ":memory:")

dbListTables(con4)

copy_to(con4, nycflights13::flights, "flights",
  temporary = FALSE, 
  indexes = list(
    c("year", "month", "day"), 
    "carrier", 
    "tailnum",
    "dest"
  )
)

flights_db <- tbl(con4, "flights")

flights_db

flights_db %>% select(year:day, dep_delay, arr_delay)

flights_db %>% filter(dep_delay > 240)

flights_db %>% 
  group_by(dest) %>%
  summarise(delay = mean(dep_time))

tailnum_delay_db <- flights_db %>% 
  group_by(tailnum) %>%
  summarise(
    delay = mean(arr_delay),
    n = n()
  ) %>% 
  arrange(desc(delay)) %>%
  filter(n > 100)

tailnum_delay_db

tailnum_delay_db %>% show_query()

dbDisconnect(con4)

nycflights13 in a sqlite db saved to your harddrive in the data directory Write the nycflights to a db.

my_db_file <- "data/nycflights13_new.sqlite"
my_db <- src_sqlite(my_db_file, create = TRUE)

con <- dbConnect(RSQLite::SQLite(), "data/nycflights13_new.sqlite")

dbListTables(con)

dbWriteTable(con, "flights", nycflights13::flights)
dbWriteTable(con, "planes", nycflights13::planes)
dbWriteTable(con, "airlines", nycflights13::airlines)
dbWriteTable(con, "airports", nycflights13::airports)
dbWriteTable(con, "weather", nycflights13::weather)


dbListTables(con)
dbListFields(con, "flights")
dbReadTable(con, "flights")
res <- dbSendQuery(con, "SELECT * FROM flights WHERE origin = 'JFK'")
dbFetch(res)
dbClearResult(res)
dbDisconnect(con)

mtcars

my_db_file <- "data/mtcars.sqlite"
my_db <- src_sqlite(my_db_file, create = TRUE)

con <- dbConnect(RSQLite::SQLite(), "data/mtcars.sqlite")

dbListTables(con)

dbWriteTable(con, "mtcars", mtcars)
dbListTables(con)
dbListFields(con, "mtcars")
dbReadTable(con, "mtcars")
res <- dbSendQuery(con, "SELECT * FROM mtcars WHERE cyl = 4")
dbFetch(res)
dbClearResult(res)
dbDisconnect(con)

iris

my_db_file <- "data/iris.sqlite"
my_db <- src_sqlite(my_db_file, create = TRUE)

con <- dbConnect(RSQLite::SQLite(), "data/iris.sqlite")

dbListTables(con)

dbWriteTable(con, "iris", iris)
dbListTables(con)
dbListFields(con, "iris")
dbReadTable(con, "iris")
res <- dbSendQuery(con, " SELECT * FROM iris WHERE Species = 'setosa' ")
dbFetch(res)
dbClearResult(res)
dbDisconnect(con)

gapmider

library(gapminder)

my_db_file <- "data/gapminder.sqlite"
my_db <- src_sqlite(my_db_file, create = TRUE)

con <- dbConnect(RSQLite::SQLite(), "data/gapminder.sqlite")

dbListTables(con)

dbWriteTable(con, "gapminder", gapminder)
dbListTables(con)
dbListFields(con, "gapminder")
dbReadTable(con, "gapminder")
res <- dbSendQuery(con, " SELECT * FROM gapminder WHERE Country = 'United States' ")
dbFetch(res)
dbClearResult(res)
dbDisconnect(con)

All three tables in one database

my_db_file <- "data/all_4.sqlite"
my_db <- src_sqlite(my_db_file, create = TRUE)

con <- dbConnect(RSQLite::SQLite(), "data/all_4.sqlite")

dbListTables(con)

dbWriteTable(con, "mtcars", mtcars)
dbWriteTable(con, "iris", iris)
dbWriteTable(con, "gapmider", gapminder)
dbWriteTable(con, "flights", flights)

dbListTables(con)

dbListFields(con, "iris")
dbListFields(con, "flights")

dbDisconnect(con)
LS0tCnRpdGxlOiAiZGJwbHlyIgphdXRob3I6ICJQcm9mLiBFcmljIEEuIFN1ZXNzIgpkYXRlOiAiMjAyMC8wNi8xNyIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKICB3b3JkX2RvY3VtZW50OiBkZWZhdWx0Ci0tLQoKVXNpbmcgW0RhdGFiYXNlcyB1c2luZyBSXShodHRwczovL2RiLnJzdHVkaW8uY29tLykuCgpTZWUgdGhlIFtSU1FMaXRlXShodHRwczovL3JzcWxpdGUuci1kYmkub3JnL2FydGljbGVzL3JzcWxpdGUpIHdlYnNpdGUuCgpgYGB7ciBtZXNzYWdlPUZBTFNFfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShkcGx5cikKbGlicmFyeShkYnBseXIpCmxpYnJhcnkoUlNRTGl0ZSkKbGlicmFyeShEQkkpCmxpYnJhcnkoYmVlcHIpCmxpYnJhcnkobnljZmxpZ2h0czEzKQpgYGAKCiMgSW4gbWVtb3J5IGRhdGFiYXNlcwoKIyMgbXRjYXJzIGRhdGEgaW4gYW4gc3FsaXRlIGRiCgpgYGB7cn0KZGF0YSgibXRjYXJzIikKbXRjYXJzCmBgYAoKCmBgYHtyfQpjb24gPC0gZGJDb25uZWN0KFJTUUxpdGU6OlNRTGl0ZSgpLCAiOm1lbW9yeToiKQoKZGJMaXN0VGFibGVzKGNvbikKCmRiV3JpdGVUYWJsZShjb24sICJtdGNhcnMiLCBtdGNhcnMpCmRiTGlzdFRhYmxlcyhjb24pCmRiTGlzdEZpZWxkcyhjb24sICJtdGNhcnMiKQpkYlJlYWRUYWJsZShjb24sICJtdGNhcnMiKQpyZXMgPC0gZGJTZW5kUXVlcnkoY29uLCAiU0VMRUNUICogRlJPTSBtdGNhcnMgV0hFUkUgY3lsID0gNCIpCmRiRmV0Y2gocmVzKQpkYkNsZWFyUmVzdWx0KHJlcykKZGJEaXNjb25uZWN0KGNvbikKYGBgCgojIyBpcmlzCgpgYGB7cn0KY29uMiA8LSBkYkNvbm5lY3QoUlNRTGl0ZTo6U1FMaXRlKCksICI6bWVtb3J5OiIpCgpkYkxpc3RUYWJsZXMoY29uMikKCmRiV3JpdGVUYWJsZShjb24yLCAiaXJpcyIsIGlyaXMpCmRiTGlzdFRhYmxlcyhjb24yKQpkYkxpc3RGaWVsZHMoY29uMiwgImlyaXMiKQpkYlJlYWRUYWJsZShjb24yLCAiaXJpcyIpCnJlcyA8LSBkYlNlbmRRdWVyeShjb24yLCAiU0VMRUNUICogRlJPTSBpcmlzIikKZGJGZXRjaChyZXMpCmRiQ2xlYXJSZXN1bHQocmVzKQpkYkRpc2Nvbm5lY3QoY29uMikKYGBgCgojIyBmbGlnaHRzCgpgYGB7cn0KY29uMyA8LSBkYkNvbm5lY3QoUlNRTGl0ZTo6U1FMaXRlKCksICI6bWVtb3J5OiIpCgpkYkxpc3RUYWJsZXMoY29uMykKCmNvcHlfdG8oY29uMywgbnljZmxpZ2h0czEzOjpmbGlnaHRzLCAiZmxpZ2h0cyIsCiAgdGVtcG9yYXJ5ID0gRkFMU0UsIAogIGluZGV4ZXMgPSBsaXN0KAogICAgYygieWVhciIsICJtb250aCIsICJkYXkiKSwgCiAgICAiY2FycmllciIsIAogICAgInRhaWxudW0iLAogICAgImRlc3QiCiAgKQopCgpkYkxpc3RUYWJsZXMoY29uMykKZGJMaXN0RmllbGRzKGNvbjMsICJmbGlnaHRzIikKZGJSZWFkVGFibGUoY29uMywgImZsaWdodHMiKQpyZXMgPC0gZGJTZW5kUXVlcnkoY29uMywgIlNFTEVDVCAqIEZST00gZmxpZ2h0cyBXSEVSRSBkYXk9MSIpCmRiRmV0Y2gocmVzKQpkYkNsZWFyUmVzdWx0KHJlcykKZGJEaXNjb25uZWN0KGNvbjMpCgpgYGAKCiMgVXNpbmcgZHBseXIuCgpgYGB7cn0KY29uNCA8LSBkYkNvbm5lY3QoUlNRTGl0ZTo6U1FMaXRlKCksICI6bWVtb3J5OiIpCgpkYkxpc3RUYWJsZXMoY29uNCkKCmNvcHlfdG8oY29uNCwgbnljZmxpZ2h0czEzOjpmbGlnaHRzLCAiZmxpZ2h0cyIsCiAgdGVtcG9yYXJ5ID0gRkFMU0UsIAogIGluZGV4ZXMgPSBsaXN0KAogICAgYygieWVhciIsICJtb250aCIsICJkYXkiKSwgCiAgICAiY2FycmllciIsIAogICAgInRhaWxudW0iLAogICAgImRlc3QiCiAgKQopCgpmbGlnaHRzX2RiIDwtIHRibChjb240LCAiZmxpZ2h0cyIpCgpmbGlnaHRzX2RiCgpmbGlnaHRzX2RiICU+JSBzZWxlY3QoeWVhcjpkYXksIGRlcF9kZWxheSwgYXJyX2RlbGF5KQoKZmxpZ2h0c19kYiAlPiUgZmlsdGVyKGRlcF9kZWxheSA+IDI0MCkKCmZsaWdodHNfZGIgJT4lIAogIGdyb3VwX2J5KGRlc3QpICU+JQogIHN1bW1hcmlzZShkZWxheSA9IG1lYW4oZGVwX3RpbWUpKQoKdGFpbG51bV9kZWxheV9kYiA8LSBmbGlnaHRzX2RiICU+JSAKICBncm91cF9ieSh0YWlsbnVtKSAlPiUKICBzdW1tYXJpc2UoCiAgICBkZWxheSA9IG1lYW4oYXJyX2RlbGF5KSwKICAgIG4gPSBuKCkKICApICU+JSAKICBhcnJhbmdlKGRlc2MoZGVsYXkpKSAlPiUKICBmaWx0ZXIobiA+IDEwMCkKCnRhaWxudW1fZGVsYXlfZGIKCnRhaWxudW1fZGVsYXlfZGIgJT4lIHNob3dfcXVlcnkoKQoKZGJEaXNjb25uZWN0KGNvbjQpCmBgYAoKbnljZmxpZ2h0czEzIGluIGEgc3FsaXRlIGRiIHNhdmVkIHRvIHlvdXIgaGFyZGRyaXZlIGluIHRoZSBkYXRhIGRpcmVjdG9yeQpXcml0ZSB0aGUgbnljZmxpZ2h0cyB0byBhIGRiLgoKYGBge3J9Cm15X2RiX2ZpbGUgPC0gImRhdGEvbnljZmxpZ2h0czEzX25ldy5zcWxpdGUiCm15X2RiIDwtIHNyY19zcWxpdGUobXlfZGJfZmlsZSwgY3JlYXRlID0gVFJVRSkKCmNvbiA8LSBkYkNvbm5lY3QoUlNRTGl0ZTo6U1FMaXRlKCksICJkYXRhL255Y2ZsaWdodHMxM19uZXcuc3FsaXRlIikKCmRiTGlzdFRhYmxlcyhjb24pCgpkYldyaXRlVGFibGUoY29uLCAiZmxpZ2h0cyIsIG55Y2ZsaWdodHMxMzo6ZmxpZ2h0cykKZGJXcml0ZVRhYmxlKGNvbiwgInBsYW5lcyIsIG55Y2ZsaWdodHMxMzo6cGxhbmVzKQpkYldyaXRlVGFibGUoY29uLCAiYWlybGluZXMiLCBueWNmbGlnaHRzMTM6OmFpcmxpbmVzKQpkYldyaXRlVGFibGUoY29uLCAiYWlycG9ydHMiLCBueWNmbGlnaHRzMTM6OmFpcnBvcnRzKQpkYldyaXRlVGFibGUoY29uLCAid2VhdGhlciIsIG55Y2ZsaWdodHMxMzo6d2VhdGhlcikKCgpkYkxpc3RUYWJsZXMoY29uKQpkYkxpc3RGaWVsZHMoY29uLCAiZmxpZ2h0cyIpCmRiUmVhZFRhYmxlKGNvbiwgImZsaWdodHMiKQpyZXMgPC0gZGJTZW5kUXVlcnkoY29uLCAiU0VMRUNUICogRlJPTSBmbGlnaHRzIFdIRVJFIG9yaWdpbiA9ICdKRksnIikKZGJGZXRjaChyZXMpCmRiQ2xlYXJSZXN1bHQocmVzKQpkYkRpc2Nvbm5lY3QoY29uKQpgYGAKCiMgbXRjYXJzCgpgYGB7cn0KbXlfZGJfZmlsZSA8LSAiZGF0YS9tdGNhcnMuc3FsaXRlIgpteV9kYiA8LSBzcmNfc3FsaXRlKG15X2RiX2ZpbGUsIGNyZWF0ZSA9IFRSVUUpCgpjb24gPC0gZGJDb25uZWN0KFJTUUxpdGU6OlNRTGl0ZSgpLCAiZGF0YS9tdGNhcnMuc3FsaXRlIikKCmRiTGlzdFRhYmxlcyhjb24pCgpkYldyaXRlVGFibGUoY29uLCAibXRjYXJzIiwgbXRjYXJzKQpkYkxpc3RUYWJsZXMoY29uKQpkYkxpc3RGaWVsZHMoY29uLCAibXRjYXJzIikKZGJSZWFkVGFibGUoY29uLCAibXRjYXJzIikKcmVzIDwtIGRiU2VuZFF1ZXJ5KGNvbiwgIlNFTEVDVCAqIEZST00gbXRjYXJzIFdIRVJFIGN5bCA9IDQiKQpkYkZldGNoKHJlcykKZGJDbGVhclJlc3VsdChyZXMpCmRiRGlzY29ubmVjdChjb24pCmBgYAoKIyBpcmlzCgpgYGB7cn0KbXlfZGJfZmlsZSA8LSAiZGF0YS9pcmlzLnNxbGl0ZSIKbXlfZGIgPC0gc3JjX3NxbGl0ZShteV9kYl9maWxlLCBjcmVhdGUgPSBUUlVFKQoKY29uIDwtIGRiQ29ubmVjdChSU1FMaXRlOjpTUUxpdGUoKSwgImRhdGEvaXJpcy5zcWxpdGUiKQoKZGJMaXN0VGFibGVzKGNvbikKCmRiV3JpdGVUYWJsZShjb24sICJpcmlzIiwgaXJpcykKZGJMaXN0VGFibGVzKGNvbikKZGJMaXN0RmllbGRzKGNvbiwgImlyaXMiKQpkYlJlYWRUYWJsZShjb24sICJpcmlzIikKcmVzIDwtIGRiU2VuZFF1ZXJ5KGNvbiwgIiBTRUxFQ1QgKiBGUk9NIGlyaXMgV0hFUkUgU3BlY2llcyA9ICdzZXRvc2EnICIpCmRiRmV0Y2gocmVzKQpkYkNsZWFyUmVzdWx0KHJlcykKZGJEaXNjb25uZWN0KGNvbikKYGBgCgojIGdhcG1pZGVyCgpgYGB7cn0KbGlicmFyeShnYXBtaW5kZXIpCgpteV9kYl9maWxlIDwtICJkYXRhL2dhcG1pbmRlci5zcWxpdGUiCm15X2RiIDwtIHNyY19zcWxpdGUobXlfZGJfZmlsZSwgY3JlYXRlID0gVFJVRSkKCmNvbiA8LSBkYkNvbm5lY3QoUlNRTGl0ZTo6U1FMaXRlKCksICJkYXRhL2dhcG1pbmRlci5zcWxpdGUiKQoKZGJMaXN0VGFibGVzKGNvbikKCmRiV3JpdGVUYWJsZShjb24sICJnYXBtaW5kZXIiLCBnYXBtaW5kZXIpCmRiTGlzdFRhYmxlcyhjb24pCmRiTGlzdEZpZWxkcyhjb24sICJnYXBtaW5kZXIiKQpkYlJlYWRUYWJsZShjb24sICJnYXBtaW5kZXIiKQpyZXMgPC0gZGJTZW5kUXVlcnkoY29uLCAiIFNFTEVDVCAqIEZST00gZ2FwbWluZGVyIFdIRVJFIENvdW50cnkgPSAnVW5pdGVkIFN0YXRlcycgIikKZGJGZXRjaChyZXMpCmRiQ2xlYXJSZXN1bHQocmVzKQpkYkRpc2Nvbm5lY3QoY29uKQpgYGAKCgojIEFsbCB0aHJlZSB0YWJsZXMgaW4gb25lIGRhdGFiYXNlCgpgYGB7cn0KbXlfZGJfZmlsZSA8LSAiZGF0YS9hbGxfNC5zcWxpdGUiCm15X2RiIDwtIHNyY19zcWxpdGUobXlfZGJfZmlsZSwgY3JlYXRlID0gVFJVRSkKCmNvbiA8LSBkYkNvbm5lY3QoUlNRTGl0ZTo6U1FMaXRlKCksICJkYXRhL2FsbF80LnNxbGl0ZSIpCgpkYkxpc3RUYWJsZXMoY29uKQoKZGJXcml0ZVRhYmxlKGNvbiwgIm10Y2FycyIsIG10Y2FycykKZGJXcml0ZVRhYmxlKGNvbiwgImlyaXMiLCBpcmlzKQpkYldyaXRlVGFibGUoY29uLCAiZ2FwbWlkZXIiLCBnYXBtaW5kZXIpCmRiV3JpdGVUYWJsZShjb24sICJmbGlnaHRzIiwgZmxpZ2h0cykKCmRiTGlzdFRhYmxlcyhjb24pCgpkYkxpc3RGaWVsZHMoY29uLCAiaXJpcyIpCmRiTGlzdEZpZWxkcyhjb24sICJmbGlnaHRzIikKCmRiRGlzY29ubmVjdChjb24pCmBgYAoKCg==