从R中的列创建逗号分隔列表

Dic*_*nus 3 sql r dataframe

我在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)


G. *_*eck 5

我认为您真正想要的是字符串"'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)