Sie können diese mit stringr::str_extract()
tun und regulären Ausdrücken lookbehind and lookahead Verwendung:
library(tidyverse)
df <- readr::read_csv("~/../Downloads/test1.csv")
df <- df %>%
mutate(A = str_extract(col2, "(?<=A:).*?(?=\\|)"),
B = str_extract(col2, "(?<=B:).*?(?=\\|)"),
C = str_extract(col2, "(?<=C:).*?$")
)
Beispiel
Die Beispieldaten df
ist:
> df
# A tibble: 2 x 2
Id col2
<int> <chr>
1 1 A:frog's legs|B:popcorn|C:white_wine!
2 2 A:banana SUNDAE|B:[email protected]$%^|C:123456
Verwenden dplyr::mutate()
die neuen Spalten A zu erstellen, B und C:
> df <- df %>%
+ mutate(A = str_extract(col2, "(?<=A\\:).*?(?=\\|)"),
+ B = str_extract(col2, "(?<=B\\:).*?(?=\\|)"),
+ C = str_extract(col2, "(?<=C\\:).*?$")
+ )
Die data.frame df
nach dieser Operation ist:
> df
# A tibble: 2 x 5
Id col2 A B C
<int> <chr> <chr> <chr> <chr>
1 1 A:frog's legs|B:popcorn|C:white_wine! frog's legs popcorn white_wine!
2 2 A:banana SUNDAE|B:[email protected]$%^|C:123456 banana SUNDAE [email protected]#$%^ 123456
Wie die regulären Ausdrücke arbeiten
Der reguläre Ausdruck verwendet für Lookbehind A:
(in der ersten Saite) und Look-Ahead für |
anzupassen alle Zeichen zwischen diesen beiden. Dito für die zweite Zeichenfolge B:
. Für die dritte Zeichenfolge werden alle Zeichen nach C:
bis zum Ende der Zeichenfolge abgeglichen.
Caveat
Die oben übernimmt die Trennzeichen |
wird nicht in der zufälligen Zeichenfolgen sein. Ist dies nicht der Fall ist, dann müssen die regulären Ausdrücke leicht um dies zu berücksichtigen eingestellt werden:
> df
# A tibble: 2 x 2
Id col2
<int> <chr>
1 1 A:frog's l|egs|B:popcorn|C:white_wine!
2 2 A:banana SUNDAE|B:[email protected]|$%^|C:123456
Notiere die |
Zeichen innerhalb der zufälligen Zeichenfolgen oben. Wir wechseln die Look-Ahead-Teile der regulären Ausdrücken Konto für diese:
> df <- df %>%
+ mutate(A = str_extract(col2, "(?<=A:).*?(?=\\|B:)"),
+ B = str_extract(col2, "(?<=B:).*?(?=\\|C:)"),
+ C = str_extract(col2, "(?<=C:).*?$")
+ )
> df
# A tibble: 2 x 5
Id col2 A B C
<int> <chr> <chr> <chr> <chr>
1 1 A:frog's l|egs|B:popcorn|C:white_wine! frog's l|egs popcorn white_wine!
2 2 A:banana SUNDAE|B:[email protected]|$%^|C:123456 banana SUNDAE [email protected]|$%^ 123456
Versuchen 'Bibliothek (tidyr) df1%>% mutieren (col2 = gsub (":", "", col2))%>% trennen (col2, in = c ('A', 'B', 'C')) ' – akrun
hat sehr geholfen! Das Problem, das ich jetzt habe, ist, dass für "C: randomString" die zufällige Zeichenkette einen Unterstrich enthält (es ist also eher wie "C: random_String"). Dies bewirkt, dass diese Zeichenkette in verschiedene Spalten aufgeteilt wird. – newToCoding13