Ich bin neu in der Codierung und versuche, dieses Problem in R zu lösen:
Ich habe zwei Spalten einer Tabelle, die mit Zeichenfolgenketten mit ungleicher Länge gefüllt sind. Die Elemente der Kette sind durch ein Symbol getrennt. Jetzt möchte ich die Differenz der beiden Zeichenfolgenketten für jede Zeile extrahieren und in eine neue Spalte schreiben.
Schnurkette 1 | Schnurkette 2 | Ergebnis |
---|---|---|
A00;B01;C02;D03 | A00;B01;C02;D03;E04 | E04 |
E04;F05;G06;H07 | F05;G06;H07;I08 | E04;I08 |
.... | .... | .... |
Lösung des Problems
Hier ist etwas Ähnliches wie bei Ihrem Ansatz mit dem Tidyverse. Ich habe zwei Dummy-Spalten erstellt vec_1
und vec_2
die Zeichenfolgen in Listenspalten von Vektoren konvertiert. Der Trick besteht darin, die Karte (oder Lapply from Base) zu verwenden, um jede Reihe zu bearbeiten.
library(dplyr)
library(tokenizers)
library(purrr)
df %>%
mutate(vec_1 = map(Stringchain_1, tokenize_regex, pattern = ";", simplify = TRUE),
vec_2 = map(Stringchain_2, tokenize_regex, pattern = ";", simplify = TRUE),
Result = map2_chr(vec_1, vec_2,
~ paste(c(setdiff(.x,.y), setdiff(.y,.x)),
collapse = ";")))
Dadurch erhalten Sie das Ergebnis. Sie können jetzt alle nicht benötigten Spalten löschen.
# A tibble: 2 x 5
Stringchain_1 Stringchain_2 vec_1 vec_2 Result
<chr> <chr> <list> <list> <chr>
1 A00;B01;C02;D03 A00;B01;C02;D03;E04 <chr [4]> <chr [5]> E04
2 E04;F05;G06;H07 F05;G06;H07;I08 <chr [4]> <chr [4]> E04;I08
Keine Kommentare:
Kommentar veröffentlichen