我在R中有一个表,我希望得到一个数据帧中的列的条目,'a,b,c,d,e'
而不是,以一种形式读出[1] a b c d
,因为我想将它传递给一个sql查询WHERE DUMMY IN ('a,b,c,d,e')
是否有捷径可寻?我猜我把它变成了一个巨大的字符串并在每个''的末尾添加一个','但是我想知道它是否可能只是以一种R自动以这种格式读取它的方式来阻止列.
任何建议都会很棒.
谢谢.
42-*_*42- 10
该letters
载体是内置在R,并paste0
让你"崩溃"向量与指定的分离的字符,在这种情况下,逗号:
> paste0(letters[1:5], collapse=",")
[1] "a,b,c,d,e"
Run Code Online (Sandbox Code Playgroud)
目前尚不清楚这些字母在数据框架中的形式是什么,但如果它们只是一个名为的列,比如说letts
,你可以这样做:
paste0( dfrm$letts, collapse=",")
Run Code Online (Sandbox Code Playgroud)
我认为您真正想要的是字符串"'a', 'b', 'c', 'd'"
。我们可以使用shQuote
引号将元素toString
转换为单个逗号分隔的字符串。最后使用以下命令将其插入到SQL语句中sprintf
:
lets <- c("a", "b", "c", "d")
s <- toString(shQuote(lets))
s
## [1] "'a', 'b', 'c', 'd'"
sql <- sprintf("select * from mytab where mycol in (%s)", s)
sql
## [1] "select * from mytab where mycol in ('a', 'b', 'c', 'd')"
Run Code Online (Sandbox Code Playgroud)
您还可以使用gsubfn包中的fn $执行插入。sqldf自动加载gsubfn,因此可以s
从上面使用:
library(sqldf)
fn$sqldf("select 'b' in ($s) as isPresent")
## isPresent
## 1 1
Run Code Online (Sandbox Code Playgroud)