我要按名称的顺序选择数据框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])
答案 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")