grep et operateurs NOT / AND

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

David Devreker
Messages : 153
Enregistré le : 17 Oct 2011, 10:08

grep et operateurs NOT / AND

Messagepar David Devreker » 10 Mai 2019, 12:17

Bonjour à tous.

J'ai à ma disposition un data.frame dont les noms de colonne sont susceptibles d'évoluer dans le temps.
J'aimerais interagir avec les colonnes de ce data.frame en fonction de leur nom, nom que je sélectionne en fonction de critère précis pour m'affranchir de leur possible modification.
La fonction grep est très utile mais je n'arrive pas à faire rentrer tous les critères que je désire dans la fonction.
Pour prendre un exemple simplifé, voici les noms de quelques colonnes :

Code : Tout sélectionner

 Var <- c("Temperature (°C)_PFB","Temperature_Optode (°C)_PFB","Temperature_pH (°C)_PFB","PFB_SBE25Temp","Total Chl_A (µg/l)_PFB")


Il faut que j'interagisse uniquement avec les colonnes 1 et 4, j'ai trouvé une partie de la solution qui consiste à sélectionner les colonnes avec les termes "temp" et "PFB" :

Code : Tout sélectionner

 Var[grep("(?=.*temp)(?=.*PFB)",Var,ignore.case=T, perl=T)]
 [1] "Temperature (°C)_PFB"        "Temperature_Optode (°C)_PFB" "Temperature_pH (°C)_PFB"     "PFB_SBE25Temp"


mais je n'arrive pas à exclure les colonnes avec "Optode" et "pH"....

Quelqu'un aurait une solution pour inclure cette exclusion dans la même fonction ?

Merci beaucoup

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: grep et operateurs NOT / AND

Messagepar Mickael Canouil » 10 Mai 2019, 12:36

Bonjour,

je ne suis pas sûr de comprendre l'intérêt de vouloir absolument que l'expression régulière ne soit pas découpée en deux, surtout qu'ici il n'y a pas vraiment de point commun dans les chaînes de caractères.
On s'approche de vouloir reproduire la machine de Rube Goldberg...

Code : Tout sélectionner

Var <- c("Temperature (°C)_PFB","Temperature_Optode (°C)_PFB","Temperature_pH (°C)_PFB","PFB_SBE25Temp","Total Chl_A (µg/l)_PFB")

c(grep("^Temperature .*", Var, ignore.case = TRUE), grep("^PFB_.*", Var, ignore.case = TRUE))
#> [1] 1 4

which(startsWith(Var, "Temperature ") | startsWith(Var, "PFB_"))
#> [1] 1 4


Au passage, si c'est toujours les colonnes 1 et 4, pourquoi ne pas prendre les colonnes 1 et 4 directement ?

Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr

David Devreker
Messages : 153
Enregistré le : 17 Oct 2011, 10:08

Re: grep et operateurs NOT / AND

Messagepar David Devreker » 10 Mai 2019, 13:02

Bonjour,

merci pour votre réponse. Le problème c'est que la position des colonnes peut ne pas être toujours la même, et leur nom également... De plus, la position des termes dans les noms n'est pas non plus garantie ("Temp" en début etc.)...

Il me faut retenir la présence de termes précis qui ne risquent pas de changer comme "temp" pour la température (non case sensitive),"PFB" qui est le dispositif de mesure et supprimer les termes indésirables comme "Optode" (autre capteur) et "pH" (pas le bon paramètre).

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: grep et operateurs NOT / AND

Messagepar Mickael Canouil » 10 Mai 2019, 14:15

Conceptuellement, il y a un problème... "temp" et "pfb" sont tous deux utilisés dans plusieurs colonnes.
A moins de contraindre à un standard le nom des colonnes, vous ne trouverez pas de constance dans l'inconstance (ou de spécificité dans la généralité)...

Sinon, vous êtes parti pour faire une liste de condition à incrémenter à chaque nouveau fichier (si les colonnes changent de format/nom).
Mickaël
mickael.canouil.fr | rlille.fr


Retourner vers « Questions en cours »

Qui est en ligne

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