Wie können zwei Strings verkettet werden?

Wie kann ich zwei Werte verketten (kombinieren)? Zum Beispiel habe ich:

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

Mein Ziel ist es, die beiden Werte in “tmp” zu einer Zeichenkette zu verketten:

 tmp_new = "GAD,AB" 

Welche function kann das für mich?

   
 paste() 

ist der Weg zu gehen. Wie die vorherigen Poster gezeigt haben, kann Paste zwei Dinge tun:

Werte zu einer “Zeichenkette” verketten, z

 > paste("Hello", "world", sep=" ") [1] "Hello world" 

wobei das Argument sep das Zeichen angibt, das zwischen den Argumenten zum Verketten oder Zusammenfassen von Zeichenvektoren zu verwenden ist

 > x < - c("Hello", "World") > x [1] "Hello" "World" > paste(x, collapse="--") [1] "Hello--World" 

wobei das Argument collapse das Zeichen angibt, das zwischen den Elementen des zu kollabierenden Vektors verwendet werden soll.

Sie können beide kombinieren:

 > paste(x, "and some more", sep="|-|", collapse="--") [1] "Hello|-|and some more--World|-|and some more" 

Hoffe das hilft.

help.search() ist eine praktische function, z

 > help.search("concatenate") 

führt Sie zum paste() .

Für die erste stringr::str_c() können wir uns stringr::str_c() (und dann toString() unten). Es ist nicht so lange wie diese Frage gewesen, also denke ich, es ist nützlich zu erwähnen, dass es auch existiert.

Sehr einfach zu bedienen, wie Sie sehen können.

 tmp < - cbind("GAD", "AB") library(stringr) str_c(tmp, collapse = ",") # [1] "GAD,AB" 

Aus seiner Beschreibung der Dokumentationsdatei passt es gut zu diesem Problem.

Um zu verstehen, wie str_c funktioniert, müssen Sie sich vorstellen, dass Sie eine Matrix von Strings aufbauen. Jedes Eingabeargument bildet eine Spalte und wird unter Verwendung der üblichen Recylingregeln auf die Länge des längsten Arguments erweitert. Die Trennzeichenfolge wird zwischen jeder Spalte eingefügt. Wenn collapse NULL ist, wird jede Zeile in eine einzelne Zeichenfolge zusammengefasst. Wenn diese Zeichenfolge nicht-NULL ist, wird sie am Ende jeder Zeile eingefügt, und die gesamte Matrix wird zu einer einzigen Zeichenfolge reduziert.

Hinzugefügt 13.04.2016 : Es ist nicht genau das gleiche wie Ihre gewünschte Ausgabe (zusätzlicher Platz), aber niemand hat es auch erwähnt. toString() ist im Grunde eine Version von paste() mit collapse = ", " fest codiert, so dass Sie tun können

 toString(tmp) # [1] "GAD, AB" 
 > tmp = paste("GAD", "AB", sep = ",") > tmp [1] "GAD,AB" 

Ich habe das von Google gefunden, indem ich nach R-verketteten Strings gesucht habe: http://stat.ethz.ch/R-manual/R-patched/library/base/html/paste.html

Alternativ können Sie, wenn Sie direkt in eine Datei oder eine Standardausgabe ausgeben möchten, cat :

 cat(s1, s2, sep=", ") 

Wie andere bereits erwähnt haben, ist paste() der richtige Weg. Aber es kann lästig werden, wenn paste(str1, str2, str3, sep='') wenn Sie das nicht standardmäßige Trennzeichen paste(str1, str2, str3, sep='') eingeben müssen.

Sie können sehr einfach Wrapper-functionen erstellen, die vieles einfacher machen. Wenn Sie zum Beispiel feststellen, dass Sie Strings ohne Trennzeichen wirklich häufig verketten, können Sie Folgendes tun:

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

oder wenn Sie oft Strings aus einem Vektor verbinden möchten (wie implode() von PHP):

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

Ermöglicht dies:

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

Außerdem gibt es das eingebaute paste0 , das dasselbe wie mein paste0 tut, aber keine benutzerdefinierten Trennzeichen paste0 . Es ist etwas effizienter als paste() .

Sie können einen eigenen Operator erstellen:

 '%&%' < - function(x, y)paste0(x,y) "new" %&% "operator" [1] newoperator` 

Sie können auch 'and' ( & ) operator neu definieren:

 '&' < - function(x, y)paste0(x,y) "dirty" & "trick" "dirtytrick" 

Verwirrung mit der Grundliniensyntax ist hässlich, aber das paste()/paste0() gilt für die Verwendung von paste()/paste0() Wenn Sie nur mit Ihrem eigenen Code arbeiten, können Sie (fast immer) logisches & and operator durch * ersetzen und Multiplikationen logischer Werte statt logischer verwenden und &'

Ein anderer Weg:

 sprintf("%s you can add other static strings here %s",string1,string2) 

Es ist manchmal nützlich als paste() -function. %s bezeichnet den Ort, an dem die subjektiven Zeichenfolgen enthalten sind.

Beachten Sie, dass dies praktisch ist, wenn Sie versuchen, einen Pfad zu erstellen:

 sprintf("/%s", paste("this", "is", "a", "path", sep="/")) 

Ausgabe

 /this/is/a/path 

Gegeben die Matrix, tmp, die du erstellt hast:

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

Ich nehme an, es gibt einen Grund, warum Sie eine Matrix mit cbind erstellen, im Gegensatz zu einfach:

 tmp < - "GAD,AB" 

Betrachten Sie den Fall, in dem die Zeichenfolgen Spalten sind und das Ergebnis eine neue Spalte sein sollte:

 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 # abc 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 

Überspringen Sie optional die Untermenge [c("a", "b")] wenn alle Spalten eingefügt werden müssen.

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

Eine weitere Antwort ohne Paste:

 x < - capture.output(cat(data, sep = ",")) x [1] "GAD,AB" 

Woher

  data < - c("GAD", "AB")