читать только некоторые столбцы с RSQLite?

Я хочу прочитать только 3 столбца из таблицы. Прямо сейчас я делаю что-то, что, как мне кажется, очень неэффективно.

library(dplyr, quietly = T, warn.conflicts = F)
library(RSQLite, quietly = T) 
db <- dbConnect( SQLite() , "SIPP08.db" )
dbListTables(db) 
w13 <- dbReadTable( db , 'w13' )
dbDisconnect(db)

df = w13 %>%
  select(ssuid, epppnum,ejbind1)

Есть ли лучший способ сделать это?

Спасибо!


Я также пытался использовать dplyr, как это

my_db <- src_sqlite(path = "SIPP08.db")
w13 <- tbl(my_db, "w13")
df = w13 %>%
  select(ssuid, epppnum,ejbind1)

Но это не работает


person Ignacio    schedule 25.03.2015    source источник


Ответы (1)


Было бы лучше напрямую запросить базу данных SQLite, что-то в этом роде

library(dplyr)
library(RSQLite)

db <- src_sqlite("SIPP08.db")
df <- tbl(db, sql("SELECT ssuid, epppnum, ejbind1 from wt13"))

Я не понимаю, почему у вас есть list, но вы можете просто использовать пакет DBI и RSQLite, чтобы получить data.frame

library(DBI)
db <- dbConnect(SQLite() , "SIPP08.db")
df <- dbGetQuery(db, "SELECT ssuid, epppnum, ejbind1 from wt13")

У меня нет ваших данных, но первый код работает для меня, используя игрушечный набор данных.

person dickoa    schedule 25.03.2015
comment
Я получаю сообщение об ошибке: Ошибка в UseMethod(tbl): нет применимого метода для 'tbl', примененного к объекту класса c('SQLiteConnection', 'DBIConnection', 'DBIObject') - person Ignacio; 25.03.2015
comment
@ Игнасио странно! Я добавил еще один способ добиться того, что вы хотите сделать. - person dickoa; 25.03.2015
comment
О, теперь понятно, но я думаю, что лучше сделать src_sqlite("SIPP08.db") %>% tbl("wt13") %>% select(ssuid, epppnum, ejbind1) - person hadley; 26.03.2015
comment
@hadley Вероятно, в его установке чего-то не хватает, потому что этот код у него не работает. Он попробовал это (см. вторую попытку с dplyr в вопросе), но без дополнительной информации о том, почему, действительно трудно помочь. - person dickoa; 26.03.2015