Wie kann man zwei strings verkettet werden?
Wie kann ich die Verkettung (merge, combine) zwei Werte?
Ich habe zum Beispiel:
tmp = cbind("GAD", "AB")
tmp
# [,1] [,2]
# [1,] "GAD" "AB"
Mein Ziel ist es, verketten Sie die beiden Werte in "tmp" zu einem string:
tmp_new = "GAD,AB"
Welche Funktion kann das für mich tun?
- Die meisten Antworten hier brechen, wenn die Zeichenketten sind Vektoren, da @RichardScriven Antwort Notizen.
- was über die kleine Antwort, die ich gepostet haben? irgendwelche Vorschläge um das zu verbessern?
Du musst angemeldet sein, um einen Kommentar abzugeben.
ist der Weg zu gehen. Wie die vorherigen Poster wies darauf hin, einfügen können zwei Dinge tun:
verketten der Werte in eine "string", z.B.
wo das argument
sep
gibt die Figur(en) verwendet werden, zwischen die Argumente zu verketten,oder Zusammenbruch character Vektoren
wo das argument
collapse
gibt die Figur(en) verwendet werden, die zwischen die Elemente des Vektors reduziert werden.Können Sie auch beides kombinieren:
Hoffe, das hilft.
paste()
für meinen Geschmack. Zum Beispielpaste(c('a','b'),'blah', c(1,2,3))
Ergebnisse in"a blah 1" "b blah 2" "a blah 3"
. Im Grunde ist es erzeugt einen Vektor von Zeichenketten die gleiche Länge wie die längste Vektor übergeben wird, und Schleifen den anderen Vektoren/strings auf die gleiche Länge. Viel Raum für zufällige Verhalten gibt.paste0("blah", 1:3)
zu bekommen"blah1" "blah2" "blah3"
.data.frame()
nicht lassen Sie es tun, wenn die Vektoren sind keine vielfachen voneinander.matrix()
spuckt Warnungen, aberarray()
nicht. Ziemlich ärgerlich. Wirklich, Sie sollten alle Warnungen ausspucken, es sei denn, eine option ist eingestellt...help.search()
ist eine praktische Funktion, z.B.führen Sie zu
paste()
.Für die erste nicht-
paste()
Antwort, wir können uns aufstringr::str_c()
(und danntoString()
unten). Es ist noch nicht so lange, wie diese Frage, so denke ich, ist es nützlich zu erwähnen, dass es auch vorhanden ist.Sehr einfach zu verwenden, wie Sie sehen können.
Aus der Dokumentation-Datei Beschreibung, passt es dieses problem schön.
Hinzugefügt 4/13/2016: ist Es nicht genau der gleiche wie der von Ihnen gewünschten Ausgabe (extra Raum), aber niemand hat erwähnt, es entweder.
toString()
ist im Grunde eine version vonpaste()
mitcollapse = ", "
hart codiert, so dass Sie tun könnenpaste
nicht Vektoren. Die andere option istdo.call(paste, as.list(tmp))
.Wie andere haben darauf hingewiesen,
paste()
ist der Weg zu gehen. Aber es kann ärgerlich sein, um zu gebenpaste(str1, str2, str3, sep='')
jedes mal, wenn Sie wollen, dass die nicht-Standard-Trennzeichen.Kann man sehr leicht erstellen, wrapper-Funktionen, die machen das Leben viel einfacher. Zum Beispiel, wenn Sie finden, sich die Verkettung von strings ohne Trennzeichen wirklich oft, Sie tun können:
oder wenn Sie Häufig beitreten möchten Saiten von einem Vektor (wie
implode()
von PHP):Ermöglicht es Ihnen, dies zu tun:
Außerdem gibt es die built-in
paste0
, die nicht die gleiche Sache wie meineimplode
, aber ohne dass benutzerdefinierte Separatoren. Es ist etwas effizienter alspaste()
.Ich fand das von Google durch die Suche nach R verketten von strings: http://stat.ethz.ch/R-manual/R-patched/library/base/html/paste.html
Alternativ, wenn Ihr Ziel ist es, die Ausgabe direkt in eine Datei oder auf die Standardausgabe, die Sie verwenden können
cat
:paste
Antwort 4 Jahre später, gibt es etwa ein Dutzend vonpaste
Antworten bereits?Können Sie Ihre eigenen operator :
Können Sie auch neu definieren " und " (
&
) Betreiber :messing mit baseline-syntax hässlich ist, aber so ist es auch mit
paste()/paste0()
wenn Sie arbeiten nur mit Ihrem eigenen code können Sie (fast immer) ersetzen logische& and
Betreiber mit*
tun und Multiplikation von logischen Werten statt, mit einem logischen 'und &'paste0(as.matrix(iris[1:4]) , as.matrix(iris[1:4]))
undas.matrix(iris[1:4]) %&% as.matrix(iris[1:4])
Einen anderen Weg:
Es manchmal nützlich, als
paste()
Funktion.%s
bezeichnet den Ort, wo die subjektive strings enthalten.Beachten Sie, dass diese kommen in handliches, wenn Sie versuchen, einen Weg zu errichten:
Ausgabe
paste
ist nicht flexibel genug, wenn Sie anfügen möchten etwas zu einem string.Gegeben die matrix, tmp, das Sie erstellt haben:
Ich nehme an, es gibt einige Grund, warum Sie erstellen eine matrix mit cbind, im Gegensatz zu einfach:
Betrachten wir den Fall, wo die Saiten sind Spalten, und das Ergebnis sollte eine neue Spalte:
Optional ist, überspringen Sie die
[c("a", "b")]
subsetting, wenn alle Spalten müssen eingefügt werden.stringi, stringr
Bibliotheken sind schneller.Anderen nicht-paste-Antwort:
Wo
glue
ist eine neue Funktion, Daten-Klasse und-Paket, das entwickelt wurde, als Teil dertidyverse
, mit einer Menge von erweiterten Funktionen. Es verbindet Merkmale von der paste, sprintf, und die bisherigen anderen Antworten.Erstellt am 2019-03-06 durch die reprex Paket (v0.2.1)
Ja, es ist zuviel für das einfache Beispiel in dieser Frage, aber kraftvoll für viele Situationen. (siehe https://glue.tidyverse.org/)
Schnell Beispiel im Vergleich zu
paste
mitwith
unten. Dieglue
code war ein bisschen einfacher zu geben und sieht ein bisschen einfacher zu Lesen.Erstellt am 2019-03-06 durch die reprex Paket (v0.2.1)