Dividere una colonna di stringhe (con diversi modelli), basata su due diverse condizioni

0

Domanda

Speravo di ottenere qualche aiuto con questo problema. Quindi ho una colonna con due tipi di stringhe e avrei bisogno di dividere le stringhe in più colonne con 2 diverse condizioni. Posso capire come dividere individualmente, ma che lotta per aggiungere forse un'istruzione IF per il mio codice. Questo è il set di dati di esempio di seguito:

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

Per il primo tipo di variabile (con l' _). Vorrei dividere dopo l' _. Così ho usato il seguente codice

strsplit(data$string, "-")

Per le variabili che have.docx a loro vorrei dividere dopo la docx. Io non posso dividere basato su di un "_" come viene più volte in questa stringa. Così ho usato il seguente codice:

strsplit(data$string, "x_")

La mia domanda è: questi due tipi di corde appaiono nella stessa colonna. C'è un modo per dire a R se "docx" è la stringa di spalato dopo x_, ma se proprio non dividere il _?

Qualsiasi aiuto sarebbe apprezzato - Grazie ragazzi!

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

Migliore risposta

0

Ecco un tidyr soluzione:

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

Come la regex opere:

La regex partizioni le stringhe in due "cattura gruppi" più di un carattere di sottolineatura tra:

  • (.*?): in primo luogo acquisizione di gruppo, corrispondente ad un qualsiasi carattere (.zero o più volte (*) non avidamente (?)
  • _: letterale carattere di sottolineatura
  • ([^_]+)$: la seconda acquisizione di gruppo, corrispondente ad un qualsiasi carattere che non è un carattere di sottolineatura ([^_]) una o più volte (+) alla fine della stringa ($)

Dati:

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

Ehi, questo ha funzionato - la ringrazio molto. Se non è troppo lavoro potete per favore spiegare come hai fatto questo? Io non ottenere abbastanza questa parte: ""(.*?)_([^_]+)$")". Grazie mille!
T K

Hanno fornito una spiegazione di come th regex parte funziona
Chris Ruehlemann

In altre lingue

Questa pagina è in altre lingue

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