¿Cómo puedo concatenar (fusionar, combinar) dos valores? Por ejemplo tengo:
tmp = cbind("GAD", "AB")
tmp
# [,1] [,2]
# [1,] "GAD" "AB"
Mi objetivo es concatenar los dos valores en "tmp" en una cadena:
tmp_new = "GAD,AB"
¿Qué función puede hacer esto por mí?
r
string-concatenation
r-faq
Hans
fuente
fuente
Respuestas:
es el camino a seguir Como señalaron los carteles anteriores, pegar puede hacer dos cosas:
concatenar valores en una "cadena", por ejemplo
donde el argumento
sep
especifica los caracteres que se utilizarán entre los argumentos para concatenar o contraer vectores de caracteresdonde el argumento
collapse
especifica los caracteres que se utilizarán entre los elementos del vector que se contraerá.Incluso puedes combinar ambos:
Espero que esto ayude.
fuente
paste()
para mi gusto. Por ejemplo,paste(c('a','b'),'blah', c(1,2,3))
resultados en"a blah 1" "b blah 2" "a blah 3"
. Básicamente, crea un vector de cadenas de la misma longitud que el vector más largo que se pasa y enlaza los otros vectores / cadenas a la misma longitud. Mucho espacio para el comportamiento accidental allí.paste0("blah", 1:3)
obtener"blah1" "blah2" "blah3"
.data.frame()
no te permite hacerlo si los vectores no son múltiplos entre sí.matrix()
escupe advertencias, peroarray()
no lo hace. Un poco molesto. Realmente, todos deberían escupir advertencias a menos que se establezca alguna opción ...help.search()
es una función útil, p. ej.le llevará a
paste()
.fuente
Para la primera no
paste()
respuesta, podemos mirarstringr::str_c()
(y luego atoString()
continuación). No ha existido tanto tiempo como esta pregunta, así que creo que es útil mencionar que también existe.Muy simple de usar, como puedes ver.
De la descripción de su archivo de documentación, encaja bien con este problema.
Agregado 13/04/2016 : No es exactamente lo mismo que su salida deseada (espacio extra), pero nadie lo ha mencionado tampoco.
toString()
es básicamente una versiónpaste()
concollapse = ", "
código rígido, por lo que puedes hacerfuente
paste
no hace vectores. La otra opción esdo.call(paste, as.list(tmp))
.Como otros han señalado,
paste()
es el camino a seguir. Pero puede ser molesto tener que escribirpaste(str1, str2, str3, sep='')
cada vez que desee el separador no predeterminado.Puede crear fácilmente funciones de envoltura que hacen la vida mucho más simple. Por ejemplo, si te encuentras concatenando cadenas sin separador muy a menudo, puedes hacer:
o si a menudo quieres unir cadenas de un vector (como
implode()
de PHP):Te permite hacer esto:
Además, está incorporado
paste0
, que hace lo mismo que miimplode
, pero sin permitir separadores personalizados. Es un poco más eficiente quepaste()
.fuente
Encontré esto en Google buscando cadenas de concatenación R : http://stat.ethz.ch/R-manual/R-patched/library/base/html/paste.html
fuente
Alternativamente, si su objetivo es enviar directamente a un archivo o stdout, puede usar
cat
:fuente
paste
respuesta 4 años después cuando ya hay una docena depaste
respuestas?De otra manera:
A veces es útil que la
paste()
función.%s
denota el lugar donde se incluirán las cadenas subjetivas.Tenga en cuenta que esto será útil cuando intente crear una ruta:
salida
fuente
paste
no es lo suficientemente flexible si desea agregar algo a una cadena.Puede crear su propio operador:
También puede redefinir el
&
operador 'y' ( ):jugar con la sintaxis de línea de base es feo, pero también lo es usarlo
paste()/paste0()
si trabajas solo con tu propio código, puedes (casi siempre) reemplazar el& and
operador lógico con*
y multiplicar los valores lógicos en lugar de usar 'y' lógicofuente
paste0(as.matrix(iris[1:4]) , as.matrix(iris[1:4]))
yas.matrix(iris[1:4]) %&% as.matrix(iris[1:4])
Dada la matriz, tmp, que creaste:
Supongo que hay alguna razón por la que está creando una matriz usando cbind, en lugar de simplemente:
fuente
Considere el caso donde las cadenas son columnas y el resultado debería ser una nueva columna:
Opcionalmente, omita el
[c("a", "b")]
subconjunto si es necesario pegar todas las columnas.fuente
stringi, stringr
bibliotecas son más rápidas.Otra respuesta sin pegar:
Dónde
fuente
glue
es una nueva función, clase de datos y paquete que se ha desarrollado como parte detidyverse
, con mucha funcionalidad extendida. Combina características de paste, sprintf y las otras respuestas anteriores.Creado el 06/03/2019 por el paquete reprex (v0.2.1)
Sí, es excesivo para el ejemplo simple en esta pregunta, pero poderoso para muchas situaciones. (ver https://glue.tidyverse.org/ )
Ejemplo rápido en comparación
paste
con awith
continuación. Elglue
código fue un poco más fácil de escribir y parece un poco más fácil de leer.Creado el 06/03/2019 por el paquete reprex (v0.2.1)
fuente