Diviser une colonne de chaînes de caractères (avec des motifs différents) basée sur deux conditions différentes

0

La question

A été l'espoir d'obtenir de l'aide avec ce problème. Donc, j'ai une colonne avec deux types de cordes et j'aurais besoin de diviser les chaînes en plusieurs colonnes à l'aide de 2 des conditions différentes. Je peux comprendre comment les répartir de manière individuelle, mais de la difficulté à ajouter peut-être une instruction if pour mon code. C'est l'exemple dataset ci-dessous:

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

Pour le premier type de la variable (avec l' _). Je souhaite partager après l' _. J'ai donc utilisé le code suivant pour que

strsplit(data$string, "-")

Pour les variables have.docx j'aimerais split après le docx. Je ne peux pas répartis en fonction de "_" comme elle vient plusieurs fois dans cette chaîne. J'ai donc utilisé le code suivant:

strsplit(data$string, "x_")

Ma question est de ces deux types de chaînes apparaissent dans la même colonne. Est-il un moyen de dire R si "docx" est dans la chaîne de la diviser ensuite après x_, mais si elle n'est pas divisée sur l' _?

Toute aide serait appréciée - Merci les gars!

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

La meilleure réponse

0

Voici un tidyr solution:

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

Comment les regex fonctionne:

La regex partitions cordes en deux "groupes de capture" de plus, un trait de soulignement dans l'entre-deux:

  • (.*?): premier groupe de capture, correspondant à un caractère (.zéro fois ou plus (*) non goulûment (?)
  • _: un littéral de soulignement
  • ([^_]+)$: le deuxième groupe de capture, correspondant à un personnage qui n'est pas un trait de soulignement ([^_]une ou plusieurs fois (+) à la fin de la chaîne ($)

Données:

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

Hey c'travaillé - je vous remercie beaucoup. Si elle n'est pas trop de travail pouvez-vous nous expliquer comment vous avez fait cela? Je n'arrive pas à obtenir cette partie: ""(.*?)_([^_]+)$")". Merci beaucoup!
T K

Ont fourni une explication de la façon dont th regex partie des œuvres
Chris Ruehlemann

Dans d'autres langues

Cette page est dans d'autres langues

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