suppression de lignes sous conditions

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

Anais Payen
Messages : 60
Enregistré le : 25 Fév 2019, 08:50

Re: suppression de lignes sous conditions

Messagepar Anais Payen » 14 Mar 2019, 15:28

Pierre-Yves Berrard a écrit :
INC_homeo renvoie les lignes satisfaisant la condition donc :

Code : Tout sélectionner

INC_sanshomeo <- INC[-INC_homeo, ]
(comme ce sont des entiers, bien utiliser le signe "moins" pour supprimer les lignes et pas l'opérateur logique de négation "!"


Effectivement cela fonctionne parfaitement!

Remarque très importante si vous utilisez grep : votre code va détecter les lignes qui contiennent 34003 n'importe où dans la chaîne (pas seulement au début). Remplacer "34003" par "^34003" pour indiquer que la chaîne à rechercher se trouve au début.


Il est vrai que j'avais lu ce matin qu'il y avait des caractères à utiliser pour sélectionner des endroits dans les chaines de caractères! J'ai donc modifié ma formule!
Mais dans ce cas, pourquoi vous ne mettez pas de ^ dans votre formule avec le substr?


je vous remercie pour toutes vos réponses!

Passez une belle journée

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

Re: suppression de lignes sous conditions

Messagepar Pierre-Yves Berrard » 14 Mar 2019, 15:43

Anais Payen a écrit :Mais dans ce cas, pourquoi vous ne mettez pas de ^ dans votre formule avec le substr?

Ça fonctionne différemment.
grep utilise une expression régulière (motifs de chaînes de caractère) tandis qu'avec substr on spécifie le caractère de début et le caractère de fin (donc on est bien sûr de détecter "35003" en début de chaîne)
PY

Anais Payen
Messages : 60
Enregistré le : 25 Fév 2019, 08:50

Re: suppression de lignes sous conditions

Messagepar Anais Payen » 14 Mar 2019, 15:47

Pierre-Yves Berrard a écrit :Ça fonctionne différemment.
grep utilise une expression régulière (motifs de chaînes de caractère) tandis qu'avec substr on spécifie le caractère de début et le caractère de fin (donc on est bien sûr de détecter "35003" en début de chaîne)


Super! Merci encore

Anais Payen
Messages : 60
Enregistré le : 25 Fév 2019, 08:50

Re: suppression de lignes sous conditions

Messagepar Anais Payen » 14 Mar 2019, 17:22

Une dernière question, maintenant que j'ai exclu les 34003, je souhaiterai exclure les codes qui ne contiennent pas 13 chiffres, dans mon fichier csv ils étaient indiqués par 0000092354732, mais il semblerait que R supprime les 0 devant,

je pensais utiliser votre fonction en notant :

Code : Tout sélectionner

INC_sansTAA <- INC_sanshomeo[substr(INC_sanshomeo$drug_source_value, 1, 5) != "00000", ]


Mais comme les 0 on disparu...

Code : Tout sélectionner

     drug_source_value count
1                    0 15838
11       3400932149544  1779
12       3400933591731  1716
18             9238619  1448
25       3400509099012  1143
44             9048669   733
47       3400892697789   708
54             9260010   655
59             9225976   606
65             9238648   559
70             9274762   519


Auriez vous une idée?

Par avance, je vous remercie

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

Re: suppression de lignes sous conditions

Messagepar Pierre-Yves Berrard » 14 Mar 2019, 17:25

Il y a manifestement eu une conversion en numérique lorsque vous avez importé les données dans R.
Quelles commandes avez-vous utilisé (read.csv...) ?
PY

Anais Payen
Messages : 60
Enregistré le : 25 Fév 2019, 08:50

Re: suppression de lignes sous conditions

Messagepar Anais Payen » 14 Mar 2019, 17:29

Pierre-Yves Berrard a écrit :Il y a manifestement eu une conversion en numérique lorsque vous avez importé les données dans R.
Quelles commandes avez-vous utilisé (read.csv...) ?


Oui oui tout à fait : voici le script :

INC <- read.csv("export_med_sans_atc_2019_02_13.csv",header = TRUE, sep=";")

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

Re: suppression de lignes sous conditions

Messagepar Pierre-Yves Berrard » 14 Mar 2019, 17:46

Utiliser le paramètre colClasses. Par exemple

Code : Tout sélectionner

colClasses = c("character", "integer")
pour la première colonne en caractère et la deuxième en nombre entiers.
PY

Anais Payen
Messages : 60
Enregistré le : 25 Fév 2019, 08:50

Re: suppression de lignes sous conditions

Messagepar Anais Payen » 15 Mar 2019, 08:53

Pierre-Yves Berrard a écrit :Utiliser le paramètre colClasses. Par exemple

Code : Tout sélectionner

colClasses = c("character", "integer")
pour la première colonne en caractère et la deuxième en nombre entiers.



Une fois de plus vous avez résolu mon problème! Je vous remercie

camille gautier
Messages : 4
Enregistré le : 02 Sep 2019, 08:25

Re: suppression de lignes sous conditions

Messagepar camille gautier » 02 Sep 2019, 08:48

Bonjour,

Je souhaiterais supprimer les lignes de mon tableau qui comportent des cases dont les valeurs sont inférieures à 50 mais je n'y parviens pas. Mon tableau est composé de 9264 lignes et 24 colonnes. La formule : countTable3<-countTable[(countTable[,1:24])!=50,] me permet de supprimer toutes les lignes contenant des valeurs égal à 50 mais quand je rajoute le symbole "<" donnant : countTable3<-countTable[(countTable[,1:24])!<=50,], cela ne fonctionne pas. Pouvez vous m'aider s'il vous plait ?

Je vous remercie !
Camille

Anais Payen
Messages : 60
Enregistré le : 25 Fév 2019, 08:50

Re: suppression de lignes sous conditions

Messagepar Anais Payen » 02 Sep 2019, 08:59

camille gautier a écrit :Bonjour,

Je souhaiterais supprimer les lignes de mon tableau qui comportent des cases dont les valeurs sont inférieures à 50 mais je n'y parviens pas. Mon tableau est composé de 9264 lignes et 24 colonnes. La formule : countTable3<-countTable[(countTable[,1:24])!=50,] me permet de supprimer toutes les lignes contenant des valeurs égal à 50 mais quand je rajoute le symbole "<" donnant : countTable3<-countTable[(countTable[,1:24])!<=50,], cela ne fonctionne pas. Pouvez vous m'aider s'il vous plait ?

Je vous remercie !
Camille

Bonjour,

Si je ne vous dis pas de bêtise, vous devez simplement enlever le ! de ta formule. Dans R, != veut dire différent de, et <= inférieur ou égal , du coup !<= voudrait dire différent de et inférieur ou égal, du coup il ne comprend pas ce qu'il doit supprimer!
Je n'ai pas les données donc je ne peux pas vérifier ma proposition, à vous de me dire ;)

camille gautier
Messages : 4
Enregistré le : 02 Sep 2019, 08:25

Re: suppression de lignes sous conditions

Messagepar camille gautier » 02 Sep 2019, 09:37

Bonjour,

Merci pour votre réponse. J'ai essayé et cela ne fonctionne pas, il me supprime des lignes qui ne sont pas <= à 50 et me rajoute des lignes intitulées "NA", je ne sais pas trop ce qu'il fait.

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

Re: suppression de lignes sous conditions

Messagepar Pierre-Yves Berrard » 02 Sep 2019, 09:48

Bonjour,

À l'intérieur du crochet, countTable[,1:24])<=50 regarde pour chaque case si la valeur est inférieure ou égale à 50, ce qui produit un vecteur de booléens de taille n x 24 (avec n le nombre de lignes de countTable). D'où les lignes en trop.

Pour obtenir un vecteur de taille n, il faut faire le traitement par ligne. Mettre ceci à l'intérieur du crochet :

Code : Tout sélectionner

apply(countTable[,1:24], MARGIN = 1, function(x) all(x > 50))

edit : all(x > 50), pas any(x<=50)
PY

camille gautier
Messages : 4
Enregistré le : 02 Sep 2019, 08:25

Re: suppression de lignes sous conditions

Messagepar camille gautier » 02 Sep 2019, 10:17

Bonjour Pierre-Yves,

J'ai essayé ce que vous me proposez mais je n'y parviens pas. Voici un exemple (une partie) de mon tableau :

a1 a2 a3 d1 d2 d3 f1 f2 f3 j1 j2 j3
h1 60 70 65 51 55 63 56 70 52 64 96 100
h2 50 39 43 0 20 0 44 38 57 0 0 0
h3 55 51 58 63 53 56 66 62 74 62 141 186
h4 24 32 14 41 30 22 33 44 34 6 9 7

J'ai appliqué votre formule : counyTable3<-apply(countTable[,1:24], MARGIN = 1, function(x) all(x > 50)). En sortie j'obtiens des FALSE/TRUE et quand je fais edit : all(x > 50), il me marque "error in edit:all (x > 30) : NA/NaN argument.

Merci pour votre aide,
Camille


Pierre-Yves Berrard a écrit :Bonjour,

À l'intérieur du crochet, countTable[,1:24])<=50 regarde pour chaque case si la valeur est inférieure ou égale à 50, ce qui produit un vecteur de booléens de taille n x 24 (avec n le nombre de lignes de countTable). D'où les lignes en trop.

Pour obtenir un vecteur de taille n, il faut faire le traitement par ligne. Mettre ceci à l'intérieur du crochet :

Code : Tout sélectionner

apply(countTable[,1:24], MARGIN = 1, function(x) all(x > 50))

edit : all(x > 50), pas any(x<=50)

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

Re: suppression de lignes sous conditions

Messagepar Pierre-Yves Berrard » 02 Sep 2019, 13:00

Le vecteur de TRUE/FALSE doit être placé dans le crochet comme ceci :

Code : Tout sélectionner

countTable3 <- countTable[apply(countTable[,1:24], MARGIN = 1, function(x) all(x > 50)), ]

(ne pas tenir compte de la ligne avec edit, j'avais fait une erreur dans mon premier message)
PY

camille gautier
Messages : 4
Enregistré le : 02 Sep 2019, 08:25

Re: suppression de lignes sous conditions

Messagepar camille gautier » 03 Sep 2019, 06:45

Merci beaucoup pour votre réponse Pierre-Yves, cela fonctionne !

Camille


Retourner vers « Questions en cours »

Qui est en ligne

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

cron