如何以逗号分隔和引号粘贴矢量元素?

时间:2018-11-20 08:00:28

标签: r string

我要按名称的顺序选择数据框dfr的列,这些列是我首先获得的数字。

> (x <- names(dfr)[c(3, 4, 2, 1, 5)])
[1] "c" "d" "b" "a" "e"

在最终代码中,仅应包含名称版本,因为它更安全。

dfr[, c("c", "d", "b", "a", "e")

我想将用逗号和引号分隔的元素粘贴到字符串中,以便将其包括在最终代码中。我尝试了一些选择,但它们没有给我我想要的东西:

> paste(x, collapse='", "')
[1] "c\", \"d\", \"b\", \"a\", \"e"
> paste(x, collapse="', '")
[1] "c', 'd', 'b', 'a', 'e"

我需要类似"'c', 'd', 'b', 'a', 'e'"的东西,当然"c", "d", "b", "a", "e"会更好。

数据

dfr <- setNames(data.frame(matrix(1:15, 3, 5)), letters[1:5])

3 个答案:

答案 0 :(得分:1)

尝试使用datapasta软件包中的vector_paste()函数

library(datapasta)

vector_paste(input_vector = letters[1:3])
#> c("a", "b", "c")

vector_paste_vertical(input_vector = letters[1:3]) 
#> c("a",
#>   "b",
#>   "c")

答案 1 :(得分:1)

或者,使用基数R,您可以得到想要的:

(x <- letters[1:3])
q <- "\""
( y <- paste0("c(", paste(paste0(q, x, q), collapse = ", ") , ")" ))
[1] "c(\"a\", \"b\", \"c\")"

尽管我不确定您为什么要这么做?当然,您可以简单地像这样子集:

df <- data.frame(a=1:3, b = 1:3, c = 1:3)
df[ , x]

  a b c
1 1 1 1
2 2 2 2
3 3 3 3

df[ , rev(x)]

  c b a
1 1 1 1
2 2 2 2
3 3 3 3

答案 2 :(得分:1)

因此dput(x)是正确的答案,但以防万一您想知道如何通过修改现有代码来实现此目的,您可以执行以下操作:

cat(paste0('c("', paste(x, collapse='", "'), '")'))
c("c", "d", "b", "a", "e")

也可以使用软件包来完成(如Tung所示),这是使用glue的示例:

library(glue)
glue('c("{v}")', v = glue_collapse(x, '", "'))
c("c", "d", "b", "a", "e")