我正在尝试使用字符向量提取部分数据库。为了解释,我使用了 mtcars 数据如下:
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)
Run Code Online (Sandbox Code Playgroud)
我可以找到我有兴趣使用的数据框部分:
mini_df <- df[df$CarName %in% CarsToFind,]
Run Code Online (Sandbox Code Playgroud)
但是我的真实数据非常大,我宁愿不将整个数据提取到数据框中。我正在寻找类似的东西:
sqldf("SELECT * FROM mtcars_table WHERE CarName IN CarsToFind")
Run Code Online (Sandbox Code Playgroud)
但这给了我错误:“没有这样的表:CarsToFind”。我不想在 SQL 数据库中创建表“CarsToFind”,因为我想一次性执行许多不同的查询。是否可以使用这样的字符向量查询 SQL?
您实际想要在 SQLite 上执行的查询应该如下所示:
SELECT *
FROM mtcars
WHERE CarName IN ('Valiant', 'Merc 280', 'Lotus Europa', 'Volvo 142E')
Run Code Online (Sandbox Code Playgroud)
所以你需要做的就是在 R 中构建这个字符串:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
828 次 |
| 最近记录: |