web-dev-qa-db-fra.com

Concaténer des chaînes avec 

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 ...

9
Stat-R

Recherchez-vous l'argument collapse de paste?

> paste (letters [1:3], collapse = " and ")
[1] "a and b and c"
22
cbeleites

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.

5
Brian Diggs

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).

2
Greg Snow

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 "))
0
johannes