two - ¿Cómo se pueden concatenar dos cuerdas?
concatenate words in r (11)
Alternativamente, si su objetivo es enviar directamente a un archivo o una salida estándar, puede usar cat
:
cat(s1, s2, sep=", ")
¿Cómo puedo concatenar (combinar, 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í?
Como han señalado otros, paste()
es el camino a seguir. Pero puede resultar molesto tener que escribir paste(str1, str2, str3, sep='''')
cada vez que desee el separador no predeterminado.
Puede crear fácilmente funciones de envoltorio que hacen la vida mucho más simple. Por ejemplo, si te encuentras a menudo concatenando cadenas sin separador, puedes hacerlo:
p <- function(..., sep='''') {
paste(..., sep=sep, collapse=sep)
}
o si a menudo desea unir cadenas de un vector (como implode()
de PHP):
implode <- function(..., sep='''') {
paste(..., collapse=sep)
}
Te permite hacer esto:
p(''a'', ''b'', ''c'')
#[1] "abc"
vec <- c(''a'', ''b'', ''c'')
implode(vec)
#[1] "abc"
implode(vec, sep='', '')
#[1] "a, b, c"
Además, está el paste0
, que hace lo mismo que mi implode
, pero sin permitir separadores personalizados. Es un poco más eficiente que la paste()
.
Considere el caso donde las cadenas son columnas y el resultado debe ser una nueva columna:
df <- data.frame(a = letters[1:5], b = LETTERS[1:5], c = 1:5)
df$new_col <- do.call(paste, c(df[c("a", "b")], sep = ", "))
df
# a b c new_col
#1 a A 1 a, A
#2 b B 2 b, B
#3 c C 3 c, C
#4 d D 4 d, D
#5 e E 5 e, E
Opcionalmente, omita el subconjunto [c("a", "b")]
si es necesario pegar todas las columnas.
# you can also try str_c from stringr package as mentioned by other users too!
do.call(str_c, c(df[c("a", "b")], sep = ", "))
Dada la matriz, tmp, que creaste:
paste(tmp[1,], collapse = ",")
Supongo que hay alguna razón por la que estás creando una matriz usando cbind, en lugar de simplemente:
tmp <- "GAD,AB"
De otra manera:
sprintf("%s you can add other static strings here %s",string1,string2)
A veces es útil que la función paste()
. %s
denota el lugar donde se incluirán las cadenas subjetivas.
Tenga en cuenta que esto será útil cuando intente construir una ruta:
sprintf("/%s", paste("this", "is", "a", "path", sep="/"))
salida
/this/is/a/path
Otra respuesta no pegada:
x <- capture.output(cat(data, sep = ","))
x
[1] "GAD,AB"
Dónde
data <- c("GAD", "AB")
Para la primera respuesta que no sea de paste()
, podemos ver stringr::str_c()
(y luego toString()
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.
tmp <- cbind("GAD", "AB")
library(stringr)
str_c(tmp, collapse = ",")
# [1] "GAD,AB"
De la descripción del archivo de documentación, se ajusta muy bien a este problema.
Para comprender cómo funciona str_c, debe imaginar que está construyendo una matriz de cadenas. Cada argumento de entrada forma una columna y se expande a la longitud del argumento más largo, utilizando las reglas de reciclaje habituales. La cadena sep se inserta entre cada columna. Si el colapso es NULL, cada fila se contrae en una sola cadena. Si no es NULL, la cadena se inserta al final de cada fila y la matriz completa se colapsó en una sola cadena.
Añadido el 13/13/2016 : no es exactamente lo mismo que su salida deseada (espacio extra), pero nadie lo ha mencionado tampoco. toString()
es básicamente una versión de paste()
con collapse = ", "
codificado, por lo que puedes hacer
toString(tmp)
# [1] "GAD, AB"
Puedes crear tu propio operador:
''%&%'' <- function(x, y)paste0(x,y)
"new" %&% "operator"
[1] newoperator`
También puede redefinir el operador ''y'' ( &
):
''&'' <- function(x, y)paste0(x,y)
"dirty" & "trick"
"dirtytrick"
jugar con la sintaxis de línea de base es feo, pero también lo es usar paste()/paste0()
si trabaja solo con su propio código, puede (casi siempre) reemplazar lógico & and
operador con *
y hacer la multiplicación de valores lógicos en lugar de usar lógico y & ''
help.search()
es una función útil, por ejemplo,
> help.search("concatenate")
te llevará a paste()
.
> tmp = paste("GAD", "AB", sep = ",")
> tmp
[1] "GAD,AB"
Encontré esto en Google buscando cadenas de concatenación R : http://stat.ethz.ch/R-manual/R-patched/library/base/html/paste.html
paste()
es el camino a seguir Como señalaron los carteles anteriores, pegar puede hacer dos cosas:
concatenar valores en una "cadena", por ejemplo
> paste("Hello", "world", sep=" ")
[1] "Hello world"
donde el argumento sep
especifica los caracteres que se utilizarán entre los argumentos para concatenar o contraer los vectores de caracteres
> x <- c("Hello", "World")
> x
[1] "Hello" "World"
> paste(x, collapse="--")
[1] "Hello--World"
donde el argumento collapse
especifica los caracteres que se utilizarán entre los elementos del vector que se va a contraer.
Incluso puedes combinar ambos:
> paste(x, "and some more", sep="|-|", collapse="--")
[1] "Hello|-|and some more--World|-|and some more"
Espero que esto ayude.