Mam dużą ramkę danych i chcę ciągi być wyrównane w kolumnach na podstawie przyrostków (podciągi), The dataframe źródło wygląda następująco:align struny dataframe w kolumnach w R
notst stoi na inny zmienna preffixes być ignorowane
# col1 col2 col3
# notst-s1 notst-s2 notst-x3
# notst-s1 notst-x3 notst-a5
# notst-s2 notst-a5
# notst-x3 notst-a5
rezultatem powinno być:
# 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: Rozważmy cały sufiks (po "-"). Nie ma liczb. Istnieją przypadki, w których cały ciąg ("xxxx-spst") powinien być dopasowany (*), ponieważ część xxxx ciągu występuje w kilku wersjach.
dla:
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)
możliwy wynik może być: (nazwa kolumny, a porządek jest bez znaczenia)
# col1 col2 col3 col4
# st1-ab stb-spst sta-spst
# st4-ab stc-spst sta-spst
# st7-ab stb-spst
# stb-spst st9-ba
(*) Należy zauważyć, że w rzędzie 2, col2 „STC-SPST "wydaje się nie na miejscu, ale nie stanowi problemu, ponieważ wartość stb -stst nie istnieje w tym wierszu, więc w tym konkretnym przypadku liczy się tylko przyrostek (" spst "). Innymi słowy, gdy cały ciąg (przedrostek-przyrostek) pasuje do innych (w innych wierszach), powinny one być w tej samej kolumnie, jeśli nie, gdy sufiks dopasuje sufiks (innych wierszy), powinny one być w tym samym kolumna. Wynikowa ramka danych powinna mieć taką samą liczbę wierszy, jaka jest możliwa dla oryginalnej i najniższej liczby kolumn.
EDYCJA. Odpowiedź powinna być uniwersalna i pracować dla:
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)
na przykład również. Możliwy wynik:
# 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
przykład 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)
pożądane wyjście
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
przykład EDIT 4. Aby ułatwić zadanie, można jednoznacznie określić w funkcji przyrostki może mieć więcej niż jeden możliwy prefiks w wierszu. W tym przykładzie ("spst"). Zatem dowolny ciąg z sufiksem różnym od "spst" powinien mieć tylko jeden możliwy prefiks na wiersz i może i musi być zwinięty w jedną kolumnę w wynikowym df, jako col2 w pożądanym wyjściu. To nie jest to, co chciałem pierwotnie, ponieważ dostanę więcej kolumn, niż się spodziewano. Idealnie ciągi zawierające spst i różne prefiksy powinny pojawić się w najniższej liczbie kolumn możliwych. Patrz wyżej).
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)
sygnał wyjściowy
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
można zapewnić nam jakąś logikę, w jaki sposób dane są przemieszczane? Dlaczego chcesz to zrobić? –
@Ferroao Edytowane nowe dane przykładowe i oczekiwane wyjście dla tego jest mylące – akrun
ma prefiks i sufiks (oddzielony przez -) jak poprzednio. ale bez liczb w sufiksie. Dane wyjściowe na podstawie przyrostków, aw niektórych przypadkach całego łańcucha, gdy więcej niż jeden mecz (cols 2 i 3). – Ferroao