2010-01-20 24 views
189

Si tengo un vector de tipo carácter, ¿cómo puedo concatenar los valores en una cadena? Así es como lo haría con pasta():Concatenar un vector de cadenas/caracteres

sdata = c('a', 'b', 'c') 
paste(sdata[1], sdata[2], sdata[3], sep ='') 

rendimiento "abc".

Pero, por supuesto, eso solo funciona si conozco la longitud de sdata con anticipación.

Respuesta

327

tratar de usar un argumento vacío colapso dentro de la función de la goma:

paste(sdata, collapse = '')

Gracias a http://twitter.com/onelinetips/status/7491806343

+2

Solo una nota que si 'sdata' puede contener cualquiera de las cadenas que son todas de la misma longitud o de longitudes variables, entonces' pegar (sdata, sep = '', colla pse = '') 'debe usarse para evitar resultados inesperados. – zelanix

31

respuesta de Matt es sin duda la respuesta correcta. Sin embargo, aquí es una solución alternativa para el caso de socorro cómicas:

do.call(paste, c(as.list(sdata), sep = "")) 
+6

realmente podría haber trabajado una declaración de apply() allí. Si lo haces, te votaré;) –

+0

esta sería la solución más elegante si el parámetro 'colapso' no existiera. así que no hay mucho alivio cómico si recientemente has tenido que hacer algo muy similar :) –

4

Para sdata:

gsub(", ","",toString(sdata)) 

Para un vector de enteros: Respuesta

gsub(", ","",toString(c(1:10))) 
+4

Esta es una respuesta peligrosa: si hay secuencias de espacio de coma en los elementos del vector, esta respuesta los eliminará. – C8H10N4O2

2

de Matt Turner es sin duda la respuesta correcta. Sin embargo, en el espíritu de respuesta Ken Williams, usted podría también hacer:

capture.output(cat(sdata, sep="")) 
2

Puede utilizar stri_paste función con collapse parámetro de stringi paquete de la siguiente manera:

stri_paste(letters, collapse='') 
## [1] "abcdefghijklmnopqrstuvwxyz" 

Y algunos puntos de referencia:

require(microbenchmark) 
test <- stri_rand_lipsum(100) 
microbenchmark(stri_paste(test, collapse=''), paste(test,collapse=''), do.call(paste, c(as.list(test), sep=""))) 
Unit: microseconds 
             expr  min  lq  mean median  uq  max neval 
      stri_paste(test, collapse = "") 137.477 139.6040 155.8157 148.5810 163.5375 226.171 100 
       paste(test, collapse = "") 404.139 406.4100 446.0270 432.3250 442.9825 723.793 100 
do.call(paste, c(as.list(test), sep = "")) 216.937 226.0265 251.6779 237.3945 264.8935 405.989 100