r - 使用 read.csv.sql 从单列中选择多个值

标签 r sqldf

我正在使用 sqldf 包中的 read.csv.sql 来尝试读取行的子集,其中该子集从多个值中进行选择 - 这些值是存储在另一个向量中。

我已经找到了一种可行的表单方法,但我想看看传递 sql 语句的正确方法。

下面的代码给出了最小的示例。

library(sqldf)

# some data
write.csv(mtcars, "mtcars.csv", quote = FALSE, row.names = FALSE)

# values to select from variable 'carb'
cc <- c(1, 2)

# This only selects last value from 'cc' vector
read.csv.sql("mtcars.csv", sql = paste("select * from file where carb = ", cc ))

# So try using the 'in' operator - this works
read.csv.sql("mtcars.csv", sql = "select * from file where carb in (1,2)" ) 

# but this doesn't
read.csv.sql("mtcars.csv", sql = paste("select * from file where carb in ", cc ))

# Finally this works
read.csv.sql("mtcars.csv", sql = paste("select * from file where carb in ", 
                                       paste("(", paste(cc, collapse=",") ,")")))

上面的最后一行有效,但是有没有更简洁的方法来传递此声明,谢谢。

最佳答案

1) fn$ 可以使用 gsubfn 的 fn$ 进行替换(由 sqldf 自动拉入)。请参阅 sqldf home page 上的 fn$ 示例。在这种情况下,我们有:

fn$read.csv.sql("mtcars.csv", 
  sql = "select * from file where carb in ( `toString(cc)` )")

2) join 另一种方法是创建所需 carb 值的 data.frame 并与其执行连接:

Carbs <- data.frame(carb = cc)
read.csv.sql("mtcars.csv", sql = "select * from Carbs join file using (carb)")

关于r - 使用 read.csv.sql 从单列中选择多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26861951/

相关文章:

r - 如何使用tabulate函数来统计零的个数?

R - 比较两个语料库以创建一个新语料库,其中包含语料库 #1 中出现频率较高的单词

sql - 在 R 函数中调用 SQL 函数

sql - R sqldf重命名select语句中的字段

sql - 在sqldf/SQLite中缩放/平均中心/行为变量?

r - 构建 R 包和错误 "ld: cannot find -lgfortran"

r - 时间序列图矩阵

r - 将绘图另存为 SVG,删除填充符号上的笔划

r - 在 R 中建立家庭嵌套树父/子关系

r 读入多个 .dat 文件