ich einen großen Datenrahmen haben, und ich möchte Strings in Spalten ausgerichtet werden, basierend auf Suffixe (Teil), sieht die Quelle Datenrahmen wie folgt aus:align Saiten einer Datenrahmen in Spalten in r
notSt für andere steht Variable preffixes
# col1 col2 col3
# notst-s1 notst-s2 notst-x3
# notst-s1 notst-x3 notst-a5
# notst-s2 notst-a5
# notst-x3 notst-a5
Das Ergebnis ignoriert werden sollte, sein:
# col1 col2 col3 col4
# notst-s1 notst-s2 notst-x3
# notst-s1 notst-x3 notst-a5
# notst-s2 notst-a5
# notst-x3 notst-a5
Edit: Betrachten Sie das ganze Suffix (nach "-"). Es hat keine Nummern. Es gibt Fälle, in denen die gesamte Zeichenfolge ("xxxx-spst") übereinstimmen muss (*), da der xxxx-Teil der Zeichenfolge in mehreren Versionen enthalten ist.
Für:
df <- read.table(text="
col1 col2 col3
st1-ab stb-spst sta-spst
stc-spst sta-spst st4-ab
stb-spst st7-ab
st9-ba stb-spst",header=TRUE,fill=TRUE,stringsAsFactors=FALSE)
ein mögliches Ergebnis, könnten sein: (Spaltennamen und Reihenfolge irrelevant ist)
# col1 col2 col3 col4
# st1-ab stb-spst sta-spst
# st4-ab stc-spst sta-spst
# st7-ab stb-spst
# stb-spst st9-ba
(*), dass Hinweis in Zeile 2, Col2, „stc-SPST "scheint fehl am Platz, aber es ist kein Problem, weil der Wert stb-spst in dieser Zeile nicht existiert, so dass für diesen speziellen Fall nur das Suffix (" spst ") zählt. Mit anderen Worten, wenn die ganze Zeichenfolge (Präfix-Suffix) mit anderen (in anderen Zeilen) übereinstimmt, sollten sie in der gleichen Spalte sein, wenn nicht, wenn das Suffix mit dem Suffix (anderer Zeilen) übereinstimmt, sollten sie übereinstimmen Säule. Der resultierende Datenrahmen sollte die gleiche Anzahl von Zeilen wie die ursprüngliche und die niedrigste Anzahl von möglichen Spalten aufweisen.
BEARBEITEN. Antwort sollte universal sein und funktionieren für:
df2 <- read.table(text="
col1 col2 col3 col4
st1-ab stb-spst sta-spst std-spst
stc-spst sta-spst st4-ab st2-ab
stb-spst st7-ab sa-ac
st9-ba stb-spst",header=TRUE,fill=TRUE,stringsAsFactors=FALSE)
zum Beispiel auch. Mögliches Ergebnis:
# col1 col2 col3 col4 col5 col6 col7
# st1-ab stb-spst sta-spst std-spst
# st4-ab stc-spst sta-spst st2-ab
# st7-ab stb-spst sa-ac
# stb-spst st9-ba
Beispiel 3
df3 <- read.table(text="
col1 col2 col3 col4
st1-ab stb-spst sta-spst std-spst
stb-spst sta-ab
sta-spst st7-ab sa-ac
sta-spst stb-spst",header=TRUE,fill=TRUE,stringsAsFactors=FALSE)
gewünschter Ausgang
col1 col2 col3 col4 col5
1 st1-ab sta-spst stb-spst std-spst
2 sta-ab stb-spst
3 sa-ac st7-ab sta-spst
4 sta-spst stb-spst
EDIT Beispiel 4. Um einfacher die Aufgabe zu machen, können Sie explizit in einer Funktion definieren die Suffixe das kann mehr als ein mögliches Präfix pro Reihe haben. In diesem Beispiel ("spst"). Jede Zeichenfolge mit einem anderen Suffix als "spst" sollte also nur ein mögliches Präfix pro Zeile haben und kann in der resultierenden df wie col2 in der gewünschten Ausgabe in eine Spalte reduziert werden. Dies ist nicht das, was ich ursprünglich wollte, weil ich mehr Spalten als erwartet bekommen werde. Idealerweise sollten Strings, die spst und verschiedene Präfixe enthalten, in den niedrigst möglichen Spalten erscheinen. Siehe oben).
df4 <- read.table(text="
col1 col2 col3 col4
st1-ab stb-spst sta-spst std-spst
stb-spst st1-ab
sta-spst st7-ab sa-ac
sta-spst stb-spst st7-ab",header=TRUE,fill=TRUE,stringsAsFactors=FALSE)
Ausgang
row_id col1 col2 col3 col4 col5
1 st1-ab sta-spst stb-spst std-spst
2 st1-ab stb-spst
3 sa-ac st7-ab sta-spst
4 st7-ab sta-spst stb-spst
Können Sie uns einige Logik sorgen dafür, wie die Daten um bewegt wird? Warum willst du das machen? –
@Ferroao Die bearbeiteten neuen Beispieldaten und die erwartete Ausgabe für diesen ist verwirrend – akrun
es hat Präfix und Suffix (getrennt durch -) wie zuvor. aber keine Zahlen im Suffix. Die Ausgabe basiert auf Suffixen und in einigen Fällen auf der ganzen Zeichenfolge, wenn mehrere Übereinstimmungen vorhanden sind (Spalten 2 und 3). – Ferroao