在将被输入 sqldf 的字符串的向量的开头和结尾添加单引号
Add single quote to start and end of the vector of a string which would be fed into sqldf
我有这样的字符串向量:
vec1=letters[1:5]
df=data.frame(a=1:10, b=letters[1:10])
我想通过在 SQL 语句中输入字符串来对该数据框进行子集化。
vec1=letters[1:5]
vec3=paste("'", paste(vec1, collapse = "','"), "'", sep = '')
p=paste("select * from df where b in (", vec3, ")")
sqldf(p)
这很好用,但是有什么优雅的方法可以完成这项任务。我也尝试过 squotes
但它没有给我所需的单引号。
vec3=paste(vec1, collapse = "','")
vec3=sQuote(vec3)
您可以为此使用 sprintf
。
sprintf("'%s'", paste(vec1, collapse = "','"))
创建一个函数将使其更具可读性...
addQuotes <- function(x) sprintf("'%s'", paste(x, collapse = "','"))
addQuotes(vec1)
sqldf 包加载 gsubfn 包提供 fn
为此目的。 fn
分别支持代码和单个变量的反引号和美元替换。例如,尝试其中任何一个。请参阅 ?fn
和 sqldf github 页面上的示例。
fn$sqldf("select * from df where b in ( `toString(shQuote(vec1, 'sh'))` ) ")
p <- fn$identity("select * from df where b in ( `toString(shQuote(vec1, 'sh'))` ) ")
sqldf(p)
s <- toString(shQuote(vec1, 'sh'))
p <- fn$identity("select * from df where b in ( $s ) ")
sqldf(p)
我有这样的字符串向量:
vec1=letters[1:5]
df=data.frame(a=1:10, b=letters[1:10])
我想通过在 SQL 语句中输入字符串来对该数据框进行子集化。
vec1=letters[1:5]
vec3=paste("'", paste(vec1, collapse = "','"), "'", sep = '')
p=paste("select * from df where b in (", vec3, ")")
sqldf(p)
这很好用,但是有什么优雅的方法可以完成这项任务。我也尝试过 squotes
但它没有给我所需的单引号。
vec3=paste(vec1, collapse = "','")
vec3=sQuote(vec3)
您可以为此使用 sprintf
。
sprintf("'%s'", paste(vec1, collapse = "','"))
创建一个函数将使其更具可读性...
addQuotes <- function(x) sprintf("'%s'", paste(x, collapse = "','"))
addQuotes(vec1)
sqldf 包加载 gsubfn 包提供 fn
为此目的。 fn
分别支持代码和单个变量的反引号和美元替换。例如,尝试其中任何一个。请参阅 ?fn
和 sqldf github 页面上的示例。
fn$sqldf("select * from df where b in ( `toString(shQuote(vec1, 'sh'))` ) ")
p <- fn$identity("select * from df where b in ( `toString(shQuote(vec1, 'sh'))` ) ")
sqldf(p)
s <- toString(shQuote(vec1, 'sh'))
p <- fn$identity("select * from df where b in ( $s ) ")
sqldf(p)