Extraction de l'information d'une colonne en plusieurs colonnes

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

cmgautier
Messages : 2
Enregistré le : 26 Sep 2022, 14:06

Extraction de l'information d'une colonne en plusieurs colonnes

Messagepar cmgautier » 27 Sep 2022, 07:09

Bonjour,
Je souhaiterai découper comme suit ma colonne seq_name de mon dataframe df :

df$seq_name
"lcl|NM_010512.5_cds_NP_034642.2_1 [gene=Igf1] [db_xref=CCDS:CCDS24104.2] [protein=insulin-like growth factor I isoform 1] [protein_id=NP_034642.2] [location=299..778] [gbkey=CDS] "

Nouvelles colonnes souhaitées avec :
"NM_010512.5" "NP_034642.2_1" "[gene=Igf1]" "[protein=insulin-like growth factor I isoform 1]" "[location=299..778]"

J’ai tenté de faire une séparation de la colonne en plusieurs fois car les séparateurs ne sont pas les mêmes sur toute la ligne mais il y a des parties en moins ou en plus dans certaines lignes ce qui ne me permet pas d’avoir une colonne contenant toujours la même information. L’idéal serait de sélectionner les parties souhaitées de la ligne sur la base du contenu. Par exemple "NM_010512.5" avec comme début "lcl|" ou "[gene=Igf1]" avec comme début "[gene= ". Est-ce que cela est possible ? Si oui, avez-vous une idée de comment procéder ?
J’ai pensé à utiliser la fonction ci-dessous mais je ne parviens pas à écrire l’expression régulière pour l’argument regex=.
tidyr::extract(data = df, col = seq_name, into = c("id_gene", "id_protein", "gene", "protein", "location"), regex = " ")

Je vous remercie par avance.

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Extraction de l'information d'une colonne en plusieurs colonnes

Messagepar Pierre-Yves Berrard » 27 Sep 2022, 15:00

Bonjour,

Pour extraire le contenu entre crochets, on peut faire comme ceci :

Code : Tout sélectionner

stringr::str_match_all(df$seq_name, "\\[[^\\[\\]]+\\]")

(les \\ permettent de distinguer les vrais crochets des crochets utilisés pour la syntaxe de l'expression réguière)
PY

cmgautier
Messages : 2
Enregistré le : 26 Sep 2022, 14:06

Re: Extraction de l'information d'une colonne en plusieurs colonnes

Messagepar cmgautier » 27 Sep 2022, 15:28

Pierre-Yves Berrard a écrit :Bonjour,

Pour extraire le contenu entre crochets, on peut faire comme ceci :

Code : Tout sélectionner

stringr::str_match_all(df$seq_name, "\\[[^\\[\\]]+\\]"

(les \\ permettent de distinguer les vrais crochets des crochets utilisés pour la syntaxe de l'expression réguière)


Bonjour Pierre-Yves,

Je vous remercie pour votre message. Je suis parvenue à écrire les expressions régulières me permettant d'extraire l'information souhaitée (je fais plusieurs fois la manipe car je n'ai pas réussi à l'écrire en une seule ligne. Je vous joins le code si jamais ça peut servir à certains :

#pour extraire "299..778"
data_split <- tidyr::extract(data = df,
col = seq_name,
into = c("location"),
regex = "([[:digit:]]+\\.\\.[[:punct:]]?[[:digit:]]+)",
remove=FALSE)

#pour extraire "NP_034642.2"
data_split1 <- tidyr::extract(data = data_split,
col = seq_name,
into = c("ID_protein"),
regex = "([[:alpha:]]{2}[[:punct:]][[:digit:]]+\\.\\d)",
remove=FALSE)

Camille

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Extraction de l'information d'une colonne en plusieurs colonnes

Messagepar Pierre-Yves Berrard » 28 Sep 2022, 18:58

Merci d'avoir partagé votre solution !
PY


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité

cron