Mặc dù tôi hoàn toàn đồng ý với đề xuất học SQL, nhưng bạn có thể tận dụng lợi thế của thực tế là dplyr
không kéo dữ liệu cho đến khi nó hoàn toàn phải và tạo truy vấn bằng cách sử dụng dplyr
, thêm TO TABLE
và sau đó chạy câu lệnh SQL bằng cách sử dụng dplyr::do()
, như trong:
# 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"))
Bạn thậm chí có thể viết một functoin nhỏ để thực hiện điều này:
to_table <- function(qry,tbl)
dplyr::do(paste(unclass(qry$query$sql), "TO TABLE",tbl))
và chuyển truy vấn vào hàm đó như sau:
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')