ho una grande cornice di dati, e voglio stringhe da essere allineati in colonne in base suffissi (sottostringhe), il dataframe fonte assomiglia a questo:stringhe allineamento di un dataframe in colonne in r
notst significa altro preffixes variabili per essere ignorati
# col1 col2 col3
# notst-s1 notst-s2 notst-x3
# notst-s1 notst-x3 notst-a5
# notst-s2 notst-a5
# notst-x3 notst-a5
il risultato, dovrebbe essere:
# 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: considerare l'intero suffisso (dopo "-"). Non ha numeri. Ci sono casi in cui l'intera stringa ("xxxx-spst") deve essere abbinata (*) perché la parte xxxx della stringa è disponibile in diverse versioni.
Per:
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)
un possibile risultato, potrebbe essere: (nome di colonna e l'ordine è irrilevante)
# col1 col2 col3 col4
# st1-ab stb-spst sta-spst
# st4-ab stc-spst sta-spst
# st7-ab stb-spst
# stb-spst st9-ba
(*) Si noti che nella riga 2, col2, "STC-spst "sembra fuori posto, ma non è un problema perché il valore stb-spst non esiste in quella riga, quindi per quel particolare caso, solo il suffisso (" spst ") è importante. In altre parole, quando l'intera stringa (suffisso-suffisso) corrisponde ad altre (in altre righe), dovrebbero essere nella stessa colonna, in caso contrario, quando il suffisso corrisponde al suffisso (di altre righe), dovrebbero essere nello stesso colonna. Il dataframe risultante dovrebbe avere lo stesso numero di righe dell'originale e il minor numero possibile di colonne.
MODIFICA. la risposta dovrebbe essere universale e funzionare per:
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)
per esempio, anche. risultato possibile:
# 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
esempio 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)
output desiderato
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 esempio 4. Al fine di rendere il compito più facile, si può esplicitamente definire una funzione i suffissi potrebbe avere più di un prefisso possibile per riga. In questo esempio ("spst"). Quindi ogni stringa con suffisso diverso da "spst" dovrebbe avere solo un possibile prefisso per riga e può e deve essere compressa in una colonna nel df risultante, come col2 nell'output desiderato. Questo non è quello che volevo in origine perché otterrò più colonne del previsto. Idealmente stringhe contenenti spst e prefissi diversi dovrebbero apparire nel minor numero possibile di colonne. Vedi sopra).
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)
desiderata uscita
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
Ci può fornire con un po 'di logica per come i dati si sposta in giro? Perchè vuoi fare questo? –
@Ferroao I nuovi dati di esempio ed il risultato atteso per quello sono confusi – akrun
ha preffisso e suffisso (separati da -) come in precedenza. ma nessun numero in suffisso. Output basato su suffissi e, in alcuni casi, sull'intera stringa, quando più di una corrispondenza (colonne 2 e 3). – Ferroao