Je veux sélectionner les colonnes du bloc de données dfr par leurs noms dans un certain ordre, que j'obtiens avec les nombres en premier lieu.

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

Dans le code final, seule la version des noms doit être incluse, car elle est plus sûre.

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

Je veux coller les éléments séparés par des virgules et des guillemets dans une chaîne, afin de l'inclure dans le code final. J'ai essayé quelques options, mais elles ne me donnent pas ce que je veux:

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

J'ai besoin de quelque chose comme "'c', 'd', 'b', 'a', 'e'", - bien sûr que "c", "d", "b", "a", "e" serait beaucoup plus agréable.

Data

dfr <- setNames(data.frame(matrix(1:15, 3, 5)), letters[1:5])
-1
jay.sf 20 nov. 2018 à 11:00

3 réponses

Meilleure réponse

Donc dput(x) est la bonne réponse, mais juste au cas où vous vous demanderiez comment y parvenir en modifiant votre code existant, vous pouvez faire quelque chose comme ce qui suit:

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

Peut également être fait avec des packages (comme Tung l'a montré), voici un exemple utilisant glue:

library(glue)
glue('c("{v}")', v = glue_collapse(x, '", "'))
c("c", "d", "b", "a", "e")
1
sindri_baldur 20 nov. 2018 à 08:34

Essayez la fonction vector_paste() de { {X1}} package

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")
2
Tung 20 nov. 2018 à 08:16

Ou, en utilisant la base R, cela vous donne ce que vous voulez:

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

Bien que je ne sache pas vraiment pourquoi vous le voulez? Vous pouvez sûrement simplement sous-définir comme ceci:

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
1
InspectorSands 20 nov. 2018 à 08:21