Extraction d'individus avec des motifs différents

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

Achille Nyouma
Messages : 4
Enregistré le : 28 Aoû 2017, 07:57

Extraction d'individus avec des motifs différents

Messagepar Achille Nyouma » 18 Avr 2018, 10:18

Bonjour, chers tous.
Ci dessous un extrait reproductible du jeu de donnée sur lequel je travail actuellement. Je veux extraire les individus contenant uniquement le motif "POL" et qui sont tout seul (pas croiser avec un autre). Le jeu de donnée est cependant très volumineux (plusieurs milliers) donc inenvisageable à faire manuellement.

Voici par exemple un extrait:
test <- c("par_A_POL36"=3.003, "par_A_POL37"=2.003,"par_A_F49 x par_B_D92"=2.343,
"par_A_POL17 x par_B_D75"=1.103,"par_A_POL17 x par_B_D75"=0.393,
"par_A_POL17 x par_B_D75"=-3.347,"par_A_POL17 x par_B_D75"=1.045, "par_A_E39 x par_B_D75"=0.099)

J'aimerais avoir juste les individus : "par_A_POL36"=3.003 et par_A_POL37"=2.003
Voici ce que j'ai essayé de faire
grep(pattern = "POL", x = test, value=TRUE)
J'obtiens tous les individus contenant le motif "POL" (ce qui était quand même prévisible), Or, je veux juste ceux qui sont tout seul et contiennent le motif "POL". J'ai regarder dans plusieurs autres forums mais en général aucun cas ne s'apparente au mien.
Merci d'avance pour vos suggestions.
Achille

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

Re: Extraction d'individus avec des motifs différents

Messagepar Pierre-Yves Berrard » 18 Avr 2018, 10:56

Bonjour,

Pour spécifier qu'on veut POL suivi d'un certain nombre de chiffres (\\d+), dont le dernier marque la fin de la chaîne de caractères ($) :

Code : Tout sélectionner

res <- grep(pattern = "POL\\d+$", x = names(test), value = TRUE)
test[res]

NB : bien utiliser names(test) sinon la recherche se fera sur les chiffres.
PY

Achille Nyouma
Messages : 4
Enregistré le : 28 Aoû 2017, 07:57

Re: Extraction d'individus avec des motifs différents

Messagepar Achille Nyouma » 18 Avr 2018, 21:02

Merci, Pierre-Yves ça marche bien avec l'exemple, mais avec mon propre jeu de donnée ça continue de donner les individus "par_A_POL17 x par_B_D75"=1.103,"par_A_POL17 x par_B_D75"=0.393 et les individus par_A_POL36"=3.003 et par_A_POL37"=2.003.
J'ai appliqué vos consignes à la lettre.
Je vais donner d'avantages d'explication:
J'ai effectué un modèle linéaire mixte avec ASReml R et je veux récupérer uniquement les effets aléatoires des individus "par_A_POL36"=3.003 et par_A_POL37"=2.003.
A priori ça devrait marcher avec vos explications mais .... voilà
Est-ce que vous pensez qu'il y'a quelque choses d'autres que je pourrai faire, ou alors une autre alternative. Je reste à la disposition de quiconque veut apporter une aide pour d'amples explications.
Merci

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

Re: Extraction d'individus avec des motifs différents

Messagepar Pierre-Yves Berrard » 20 Avr 2018, 07:27

Il faudrait voir comment est constitué l'objet sur lequel faire l'extraction. Copier ici (si pas trop volumineux) le résultat de

Code : Tout sélectionner

dput(objet_sur_lequel_faire_l_extraction)
PY

Achille Nyouma
Messages : 4
Enregistré le : 28 Aoû 2017, 07:57

Re: Extraction d'individus avec des motifs différents

Messagepar Achille Nyouma » 20 Avr 2018, 09:26

Pierre-Yves Berrard a écrit :Il faudrait voir comment est constitué l'objet sur lequel faire l'extraction. Copier ici (si pas trop volumineux) le résultat de

Code : Tout sélectionner

dput(objet_sur_lequel_faire_l_extraction)

J'ai réduis au maximum l'objet (car il était très volumineux) sans toutefois changer sa structure et voici le résultat:

Code : Tout sélectionner

dput(test)
structure(c(-3.38988303753249, 3.34787393003249, 0, 0, 0, 0, 0, 0, 0, 0,
0, -3.45730422637819,
), .Names = c("[b]parent_A_POL1708", "[b] parent_A_POL1806",
"parent_A_POL1708:parent_B_D7570", "parent_A_POL1708:parent_B_D7571",
"parent_A_POL1708:parent_B_D7572", "parent_A_POL1708:parent_B_D7573",
"parent_A_POL1708:parent_B_D7575", "parent_A_POL1806:parent_B_D7576",
"parent_A_POL1806:parent_B_D7577", "parent_A_POL1806:parent_B_D7578",
"parent_A_POL1806:parent_B_P62752", "parent_A_POL1806:parent_B_POL2003"))

Les individus que je recherche sont: parent_A_POL1708 et parent_A_POL1806

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

Re: Extraction d'individus avec des motifs différents

Messagepar Pierre-Yves Berrard » 20 Avr 2018, 13:31

C'est parce qu'il y a des POLxxx qui apparaissent à droite du ":", ce qui n'était pas le cas dans l'exemple initial (pas représentatif).

Le pattern suivant devrait marcher, sous réserve qu'un "non croisé" est toujours de type parent_A :

Code : Tout sélectionner

"parent_A_POL\\d+$"
PY

Achille Nyouma
Messages : 4
Enregistré le : 28 Aoû 2017, 07:57

Re: Extraction d'individus avec des motifs différents

Messagepar Achille Nyouma » 22 Avr 2018, 23:46

Merci, PY, pour vos suggestions qui m'ont conduites à la solution de mon problème
J'ai résolu mon problème en faisant:

Code : Tout sélectionner

res <- test[- grep(pattern = "x", x = names(test))]
res[grep("POL", names(res), value = TRUE)]

ou alors en faisant:

Code : Tout sélectionner

res <- test[- grep(pattern = ":", x = names(test))]
res[grep("POL", names(res), value = TRUE)]

En fonction du pattern.
Premièrement je retire les pattern les individus ayant des paterns qui ne m’intéressent pas et ensuite je garde ceux ci qui m’intéressent réellement.
Merci encore.


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité