首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:基于字符向量选择sqlite数据库的子集

R:基于字符向量选择sqlite数据库的子集
EN

Stack Overflow用户
提问于 2017-02-09 00:35:22
回答 2查看 878关注 0票数 5

我正在尝试使用字符向量来提取我的数据库的一部分。为了解释,我使用了下面的mtcar数据:

代码语言:javascript
复制
library(dplyr)
library(sqldf)
library(RSQLite)

df <- cbind(rownames(mtcars),mtcars)
colnames(df)[1] <- "CarName"
CarsToFind <- c("Valiant", "Merc 280", "Lotus Europa", "Volvo 142E")
db <- dbConnect(SQLite(), dbname = 'mtcars_db.sqlite3')
dbWriteTable(conn = db, name = 'mtcars_table', value = df, row.names = TRUE, header = TRUE)

我可以找到我感兴趣的数据框部分:

代码语言:javascript
复制
mini_df <- df[df$CarName %in% CarsToFind,]

但我的实际数据相当大,我不愿将整个数据提取到一个数据框架中。我正在寻找类似以下内容的内容:

代码语言:javascript
复制
sqldf("SELECT * FROM mtcars_table WHERE CarName IN CarsToFind")

但是这给了我一个错误:“没有这样的表: CarsToFind”。我不想在SQL数据库中创建'CarsToFind‘表,因为我有许多不同的查询需要一次性执行。可以使用这样的字符向量来查询SQL吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-09 00:44:41

您实际想要在SQLite上执行的查询应该如下所示:

代码语言:javascript
复制
SELECT *
FROM mtcars
WHERE CarName IN ('Valiant', 'Merc 280', 'Lotus Europa', 'Volvo 142E')

因此,您需要做的就是在R中构建此字符串:

代码语言:javascript
复制
CarsToFind <- c("Valiant", "Merc 280", "Lotus Europa", "Volvo 142E")
CarsToFind <- paste0("'", CarsToFind, "'", collapse=", ")
whereIn <- paste0("(", CarsToFind, ")")

query <- paste0("SELECT * FROM mtcars WHERE CarName IN ", whereIn)             
sqldf(query)
票数 4
EN

Stack Overflow用户

发布于 2017-02-09 00:48:27

创建一个只有一列的dataframe,而不是创建一个字符向量,怎么样?这将会起作用:

代码语言:javascript
复制
CarsToFind <- data.frame(lookup=c("Valiant", "Merc 280", "Lotus Europa", "Volvo 142E"))

sqldf("SELECT * FROM df WHERE CarName IN CarsToFind")

此外,通过这种方式,您不必在SQL端更改/添加任何内容,您仍然可以将所有内容保留在R端。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42118697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档