Wie kann ich zwei Werte verketten (zusammenführen, 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 Zeichenfolge zu verketten:
tmp_new = "GAD,AB"
Welche Funktion kann das für mich tun?
r
string-concatenation
r-faq
Hans
quelle
quelle
Antworten:
ist der Weg zu gehen. Wie die vorherigen Poster gezeigt haben, kann Paste zwei Dinge tun:
verketten Sie Werte zu einer "Zeichenfolge", z
Dabei gibt das Argument
sep
die Zeichen an, die zwischen den Argumenten verwendet werden sollen, um Zeichenvektoren zu verketten oder zu reduzierenDabei gibt das Argument
collapse
die Zeichen an, die zwischen den Elementen des zu reduzierenden Vektors verwendet werden sollen.Sie können sogar beide kombinieren:
Hoffe das hilft.
quelle
paste()
für meinen Geschmack etwas zu flexibel . Zum Beispielpaste(c('a','b'),'blah', c(1,2,3))
ergibt sich"a blah 1" "b blah 2" "a blah 3"
. Grundsätzlich wird ein Vektor von Zeichenfolgen mit der gleichen Länge wie der längste übergebene Vektor erstellt und die anderen Vektoren / Zeichenfolgen mit derselben Länge durchlaufen. Viel Platz für versehentliches Verhalten.paste0("blah", 1:3)
zu bekommen"blah1" "blah2" "blah3"
.data.frame()
lässt Sie es nicht zu, wenn Vektoren kein Vielfaches voneinander sind.matrix()
spuckt Warnungen aus,array()
tut es aber nicht. Irgendwie nervig. Wirklich, sie sollten alle Warnungen ausspucken, es sei denn, eine Option ist festgelegt ...help.search()
ist eine praktische Funktion, zwird dich zu führen
paste()
.quelle
Für die erste Nichtantwort
paste()
können wir schauenstringr::str_c()
(und danntoString()
unten) . Es gab diese Frage noch nicht so lange, daher halte ich es für nützlich zu erwähnen, dass sie auch existiert.Sehr einfach zu bedienen, wie Sie sehen können.
Aus der Beschreibung der Dokumentationsdatei geht hervor, dass es gut zu diesem Problem passt.
Hinzugefügt am 13.04.2016 : Es ist nicht genau das Gleiche wie Ihre gewünschte Ausgabe (zusätzlicher Speicherplatz), aber niemand hat es auch erwähnt.
toString()
ist im Grunde eine Version vonpaste()
mitcollapse = ", "
hartcodierten, so dass Sie tun könnenquelle
paste
keine Vektoren. Die andere Option istdo.call(paste, as.list(tmp))
.Wie andere betont haben,
paste()
ist der Weg zu gehen. Es kann jedoch ärgerlich werden,paste(str1, str2, str3, sep='')
jedes Mal eingeben zu müssen, wenn Sie das nicht standardmäßige Trennzeichen verwenden möchten.Sie können sehr einfach Wrapper-Funktionen erstellen, die das Leben viel einfacher machen. Wenn Sie beispielsweise häufig Zeichenfolgen ohne Trennzeichen verketten, können Sie Folgendes tun:
oder wenn Sie häufig Zeichenfolgen aus einem Vektor (wie
implode()
aus PHP) verbinden möchten :Ermöglicht dies:
Es gibt auch das eingebaute System
paste0
, das das Gleiche wie ich tutimplode
, jedoch keine benutzerdefinierten Trennzeichen zulässt. Es ist etwas effizienter alspaste()
.quelle
Ich habe dies bei Google gefunden, indem ich nach R-Verkettungszeichenfolgen gesucht habe : http://stat.ethz.ch/R-manual/R-patched/library/base/html/paste.html
quelle
Wenn Sie alternativ direkt in eine Datei oder eine Standardausgabe ausgeben möchten, können Sie alternativ Folgendes verwenden
cat
:quelle
paste
, 4 Jahre später eine Antwort zu veröffentlichen, wenn es bereits etwa ein Dutzendpaste
Antworten gibt?Ein anderer Weg:
Es ist manchmal nützlich als
paste()
Funktion.%s
bezeichnet den Ort, an dem die subjektiven Zeichenfolgen enthalten sein werden.Beachten Sie, dass dies nützlich sein wird, wenn Sie versuchen, einen Pfad zu erstellen:
Ausgabe
quelle
paste
ist nicht flexibel genug, wenn Sie etwas an eine Zeichenfolge anhängen möchten.Sie können Ihren eigenen Operator erstellen:
Sie können den
&
Operator 'und' ( ) auch neu definieren :Das Durcheinander mit der Basissyntax ist hässlich, aber
paste()/paste0()
wenn Sie nur mit Ihrem eigenen Code arbeiten, können Sie (fast immer) den logischen& and
Operator durch*
logische Werte ersetzen und diese multiplizieren, anstatt logisches 'und &' zu verwenden.quelle
paste0(as.matrix(iris[1:4]) , as.matrix(iris[1:4]))
undas.matrix(iris[1:4]) %&% as.matrix(iris[1:4])
Angesichts der von Ihnen erstellten Matrix tmp:
Ich nehme an, es gibt einen Grund, warum Sie eine Matrix mit cbind erstellen, im Gegensatz zu einfach:
quelle
Stellen Sie sich den Fall vor, in dem die Zeichenfolgen Spalten sind und das Ergebnis eine neue Spalte sein sollte:
Überspringen
[c("a", "b")]
Sie optional die Teilmenge, wenn alle Spalten eingefügt werden müssen.quelle
stringi, stringr
Bibliotheken sind schneller.Eine weitere Antwort ohne Einfügen:
Wo
quelle
glue
ist eine neue Funktion, Datenklasse und ein neues Paket, das als Teil von entwickelt wurde undtidyverse
viele erweiterte Funktionen bietet. Es kombiniert Funktionen aus Einfügen, Sprintf und den vorherigen anderen Antworten.Erstellt am 06.03.2019 durch das reprex-Paket (v0.2.1)
Ja, es ist übertrieben für das einfache Beispiel in dieser Frage, aber für viele Situationen mächtig. (siehe https://glue.tidyverse.org/ )
Schnell Beispiel im Vergleich zu
paste
mitwith
unten. Derglue
Code war etwas einfacher zu tippen und sieht etwas einfacher zu lesen aus.Erstellt am 06.03.2019 durch das reprex-Paket (v0.2.1)
quelle