Rozdělit sloupec řetězce (s různými vzory) na základě dvou různých podmínek

0

Otázka

Doufal, že získat pomoc s tímto problémem. Takže mám sloupec s dvěma typy řetězců, a já bych třeba rozdělit řetězců do více sloupců pomocí 2 rozdílných podmínek. Nemůžu přijít na to, jak je rozdělit jednotlivě, ale snaží přidat možná, JESTLIŽE prohlášení, na můj kód. To je příklad datového souboru níže:

data = data.frame(string=c("HFUFN-087836_661", "207465-125 - IK_6 Mar 2009.docx_37484956"))

Pro první typ proměnné ( _ ). Chtěl bych rozdělit po _. Použil jsem následující kód, který

strsplit(data$string, "-")

Pro proměnné, které have.docx v nich bych chtěl rozdělit po docx. Nemohu rozdělit na základě "_" jak to přijde více krát v tomto řetězci. Takže jsem použil následující kód:

strsplit(data$string, "x_")

Moje otázka je, jak tyto typy řetězců se objevují ve stejném sloupci. Existuje způsob, jak říct R, pokud "docx" je v řetězec, pak rozdělit po x_, ale pokud to není rozdělit na _?

Jakýkoliv pomoci chtěl bych být ocenil - Díky kluci!

data-manipulation r string strsplit
2021-11-23 21:43:22
1

Nejlepší odpověď

0

Tady je tidyr řešení:

library(tidyr)
data %>%
extract(string,
        into = c("1","2"),    # choose your own column labels
        "(.*?)_([^_]+)$")
                                1        2
1                    HFUFN-087836      661
2 207465-125 - IK_6 Mar 2009.docx 37484956

Jak regex funguje:

Regex oddíly struny do dvou "capture skupiny" a podtržítko v-mezi:

  • (.*?): první zachycení skupiny, odpovídající libovolný znak (.) nula nebo více krát (*) non-lačně (?)
  • _: doslovný podtržítko
  • ([^_]+)$: druhá zachytit skupina, zastupující libovolný znak, který je ne podtržítko ([^_]) jeden nebo více krát (+) na samém konci, že řetězec ($)

Data:

data = data.frame(string=c("HFUFN-087836_661", "207465-125 - IK_6 Mar 2009.docx_37484956"))
2021-11-24 16:36:45

Hej to fungovalo - díky moc. Pokud to není příliš mnoho práce, můžete mi prosím vysvětlit, jak jsi to udělal? Nerozumím této části: ""(.*?)_([^_]+)$")". Díky moc!
T K

Poskytli vysvětlení, jak th regex část funguje
Chris Ruehlemann

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................