我正在使用 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/