Come possono essere concatenate 2 stringhe?



4 Answers

help.search() è una funzione utile, ad es

> help.search("concatenate")

ti porterà a paste() .

Question

Come posso unire / combinare due valori in R? Ad esempio ho:

tmp = cbind("GAD", "AB")
tmp
#      [,1]  [,2]
# [1,] "GAD" "AB"

Il mio obiettivo è quello di ottenere tmp come una stringa

tmp_new = "GAD,AB"

Quale funzione può fare questo per me?




Data la matrice, tmp, che hai creato:

paste(tmp[1,], collapse = ",")

Presumo che ci sia qualche motivo per cui stai creando una matrice usando cbind, al contrario semplicemente:

tmp <- "GAD,AB"



Come altri hanno sottolineato, paste() è la strada da percorrere. Ma può diventare fastidioso dover digitare paste(str1, str2, str3, sep='') ogni volta che si desidera il separatore non predefinito.

Puoi facilmente creare funzioni di wrapper che rendono tutto più semplice. Ad esempio, se ti ritrovi a concatenare le stringhe senza separatore molto spesso, puoi fare:

p <- function(..., sep='') {
    paste(..., sep=sep, collapse=sep)
}

o se spesso desideri unire stringhe da un vettore (come implode() da php):

implode <- function(..., sep='') {
     paste(..., collapse=sep)
}

Ti permette di fare questo:

p('a', 'b', 'c')
#[1] "abc"
vec <- c('a', 'b', 'c')
implode(vec)
#[1] "abc"
implode(vec, sep=', ')
#[1] "a, b, c"

Inoltre, c'è il built-in paste0 , che fa la stessa cosa del mio implode , ma senza consentire i separatori personalizzati. È leggermente più efficiente di paste() .







Considera il caso in cui le stringhe sono colonne e il risultato dovrebbe essere una nuova colonna:

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

Facoltativamente, salta l'intervallo [c("a", "b")] se tutte le colonne devono essere incollate.

# 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 = ", ")) 





Related