2012-03-22 19 views
9

Tengo un marco de datos con varias variables. Lo que quiero es crear una cadena usando (concatenación) los nombres de las variables, pero con algo más entre ellos ...Cadenas de concatenación con

Aquí es un ejemplo simplificado (número de variables reducido a sólo el 3 mientras que en realidad tengo muchas)

Haciendo un poco de trama de datos

df1 <- data.frame(1,2,3) # A one row data frame 
    names(df1) <- c('Location1','Location2','Location3') 

código real ...

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 

Esto da ...

[1] "The locations that we are considering are" 
[2] "Location1"       
[3] "Location2"       
[4] "Location3 ." 

Pero quiero

Las ubicaciones que estamos considerando son Ubicación1, Location2 y Location3.

Estoy seguro de que es un método mucho más simple, que algunos de ustedes sabría ... Gracias por su tiempo ...

Respuesta

22

¿Está buscando el argumento de collapsepaste?

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

Lo sentimos @ cbeleites he hecho un poco de edición después de su respuesta –

+0

En ese caso, 'pasta ("Teniendo en cuenta", pasta (cabeza (nombres (df), -1) , colapso = ","), "y", cola (nombres (df), 1), ".", sep = ""). – cbeleites

2

Si su objetivo principal es imprimir los resultados en la pantalla (o de otro tipo de salida) a continuación, utilizar la función cat (cuyo nombre deriva de concatenar):

> cat(names(iris), sep=' and '); cat('\n') 
Sepal.Length and Sepal.Width and Petal.Length and Petal.Width and Species 

Si necesita una variable con la cadena, luego puede usar paste con el argumento collapse. La función sprintf también puede ser útil para insertar cadenas en otras cadenas (o números en cadenas).

5

El hecho de que estos sean nombres de un data.frame en realidad no importa, así que saqué esa parte y se los asigné a una 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="") 

Esto da

> cat(string1) 
The locations that we are considering are Location1, Location2 and Location3. 

Tenga en cuenta que esto no va a dar sensata Inglés si sólo hay 1 elemento en strs.

La idea es colapsar todas las cadenas menos la última con espacio de coma entre ellas, y luego pegar eso junto con el texto repetitivo y la última cuerda.

0

Un otras opciones serían:

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 ")) 
Cuestiones relacionadas