J'ai un cadre de données avec plusieurs variables. Ce que je veux, c'est créer une chaîne en utilisant ( concaténation ) les noms de variables, mais avec quelque chose d'autre entre eux ...
Voici un exemple simplifié ( nombre de variables réduit à 3 alors que j’en ai beaucoup )
Création d'un bloc de données
df1 <- data.frame(1,2,3) # A one row data frame
names(df1) <- c('Location1','Location2','Location3')
Code actuel ...
len1 <- ncol(df1)
string1 <- 'The locations that we are considering are'
for(i in 1:(len1-1)) string1 <- c(string1,paste(names(df1[i]),sep=','))
string1 <- c(string1,'and',paste(names(df1[len1]),'.'))
string1
Cela donne...
[1] "The locations that we are considering are"
[2] "Location1"
[3] "Location2"
[4] "Location3 ."
Mais je veux
Les emplacements que nous envisageons sont Location1, Location2 et Location3.
Je suis sûr qu'il existe une méthode beaucoup plus simple que certains d'entre vous connaissent ... Merci pour votre temps ...
Recherchez-vous l'argument collapse
de paste
?
> paste (letters [1:3], collapse = " and ")
[1] "a and b and c"
Le fait qu'il s'agisse de noms d'un nom de données.fr n'a pas d'importance, donc j'ai extrait cette partie et je les ai affectés à une variable strs
.
strs <- names(df1)
len1 <- length(strs)
string1 <- paste("The locations that we are considering are ",
paste(strs[-len1], collapse=", ", sep=""),
" and ",
strs[len1],
".\n",
sep="")
Cela donne
> cat(string1)
The locations that we are considering are Location1, Location2 and Location3.
Notez que cela ne donnera pas un anglais raisonnable s'il n'y a qu'un seul élément dans strs
.
L'idée est de réduire tout sauf la dernière chaîne avec une virgule-espace entre eux, puis de la coller avec le texte standard et la dernière chaîne.
Si votre objectif principal est d’imprimer les résultats à l’écran (ou sur une autre sortie), utilisez la fonction cat
(dont le nom provient de concaténer):
> cat(names(iris), sep=' and '); cat('\n')
Sepal.Length and Sepal.Width and Petal.Length and Petal.Width and Species
Si vous avez besoin d'une variable avec la chaîne, vous pouvez utiliser paste
avec l'argument collapse
. La fonction sprintf
peut également être utile pour insérer des chaînes dans d'autres chaînes (ou des nombres dans des chaînes).
Une autre option serait:
library(stringr)
str_c("The location that we are consiering are ", str_c(str_c(names(df1)[1:length(names(df1))-1], collapse=", "), names(df1)[length(names(df1))], sep=" and "))