Zum Beispiel, wenn ich das habe:
n = c(2, 3, 5)
s = c("aa", "bb", "cc")
b = c(TRUE, FALSE, TRUE)
df = data.frame(n, s, b)
n s b
1 2 aa TRUE
2 3 bb FALSE
3 5 cc TRUE
Dann , wie kombiniere ich die beiden Spalten n
und s
in eine neue Spalte mit dem Namen , x
so dass es wie folgt aussieht:
n s b x
1 2 aa TRUE 2 aa
2 3 bb FALSE 3 bb
3 5 cc TRUE 5 cc
r
dataframe
multiple-columns
r-faq
user2654764
quelle
quelle
paste()
? Für das obige Beispielx
sollte die Spalte Daten wie2-aa
, dann3-bb
und enthalten5-cc
.paste(df$n,df$s,sep="-")
s
einen NA-Wert hat? (Ich möchte nicht sehen,3 NA
obdf$s[2]=NA
)Zum Einfügen eines Trennzeichens:
quelle
A - B
stattA-B
. Ist es möglich, diesen zusätzlichen Platz zu entfernen?paste(df$n,df$s,sep="-")
sep
Argument verwendet werden sollte ...). Die andere Antwort, die fast 4 Jahre vor Ihrer veröffentlicht wurde, beantwortet die Frage jedoch perfekt.Wie bereits in den Kommentaren von Uwe und UseR erwähnt, besteht eine allgemeine Lösung im
tidyverse
Format darin, den folgenden Befehl zu verwendenunite
:quelle
Einige Beispiele mit NAs und deren Entfernung mit gelten
quelle
tidyr
Paket verwenden möchten, um die erwartete Antwort auf die ursprüngliche Frage zu reproduzieren, ist dies ein Einzeiler :tidyr::unite(df, x, n, s, sep = " ", remove = FALSE)[, c(names(df), "x")]
. Ich sehe jedoch keinen Grund dafür, da diesdf$x <- paste(df$n,df$s)
viel einfacher ist.paste
oder einen Mehrwert verleihttidyr::unite
.Verwenden von
dplyr::mutate
:quelle
dplyr::mutate()
. Entschuldigung, ich versuche nur, hilfreich zu sein - ich werde die Website nicht mehr verschmutzen und mich zukünftiger Postings enthalten.Wir können paste0 verwenden :
Wenn Sie nicht möchten, dass im verketteten Feld ein Auffüllbereich eingefügt wird. Dies ist nützlicher, wenn Sie das kombinierte Feld als eindeutige ID verwenden möchten, die Kombinationen aus zwei Feldern darstellt.
quelle
Anstatt
paste
(Standard-Leerzeichen),paste0
(erzwinge die Aufnahme von fehlendenNA
als Zeichen) oderunite
(beschränkt auf 2 Spalten und 1 Trennzeichen),Ich würde eine Alternative vorschlagen, die so flexibel wie,
paste0
aber vorsichtiger ist mitNA
:stringr::str_c
Erstellt am 2020-04-10 durch das reprex-Paket (v0.3.0)
zusätzlicher Hinweis aus der
str_c
Dokumentationquelle
paste0(n,"-",s,".",b)
undstr_c(n,"-",s,".",b)
sind genau gleich, beide verwenden ein Standardtrennzeichen, das die leere Zeichenfolge ist''
. Ich weiß auch nicht, warumpaste
"aufgeräumt" ist, du meinst, du magst keine Räume?paste0
undstr_c
sind nicht genau das gleiche. Schauen Sie sich diese Links an: (1) rdocumentation.org/packages/stringr/versions/1.3.1/topics/str_c (2) stackoverflow.com/questions/53118271/…str_c
Dokumentation könnte auch expliziter sein!).Es gibt andere gute Antworten, aber wenn Sie die Spaltennamen oder die Anzahl der Spalten, die Sie im Voraus verketten möchten, nicht kennen, ist Folgendes hilfreich.
quelle