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

Christel Anger
Messages : 50
Enregistré le : 12 Mar 2008, 13:57

suppression de lignes sous conditions

Messagepar Christel Anger » 28 Avr 2008, 16:20

Bonjour

J'ai (encore!) quelques soucis avec la transformation de mon tableau : je voudrais supprimer les lignes dont la première colonne est nulle et je n'y arrive pas, même après avoir fouiller sur le forum et sur les docs R...

je voulais faire quelque chose comme ça :

Code : Tout sélectionner

for(i in 1:nrow(X)){
   if (X[i,1]==0) Y[i,1]<-X[-i,1] else (Y[i,1]<-X[i,1])
}


mais ça marche pas à cause de Y[i,1]<-X[-i,1] (je pense) mais je n'arrive pas à trouver la commande qui me permette de supprimer ces lignes... Si quelqu'un à une idée... Merci!

Christel

Aurélien Madouasse
Messages : 352
Enregistré le : 26 Fév 2007, 11:23

Messagepar Aurélien Madouasse » 28 Avr 2008, 16:28

Bonjour,

Tu peux essayer de sélectionner les lignes qui t'intéressent avec subset.

Code : Tout sélectionner

tab <- subset(tab, colonne1 != 0)


Aurélien

Christel Anger
Messages : 50
Enregistré le : 12 Mar 2008, 13:57

Messagepar Christel Anger » 29 Avr 2008, 08:08

Encore une fois c'est nickel! Merci beaucoup!

Stéphane Laurent
Messages : 1551
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 29 Avr 2008, 10:31

Autre méthode.

tab[,1]!=0 retourne un vecteur de TRUE et de FALSE, les TRUE correspondent aux indices des lignes de la 1ère colonne qui ne sont pas égaux à 0 :

Code : Tout sélectionner

> tab
     [,1] [,2] [,3]
[1,]    0    2    2
[2,]    1    4    2
[3,]    1    0    4
[4,]    0    1    1
[5,]    2    4    0
[6,]    2    2    4
> tab[,1]!=0
[1] FALSE  TRUE  TRUE FALSE  TRUE  TRUE


Pour ne garder que ces lignes il suffit alors de faire :

Code : Tout sélectionner

> tab[tab[,1]!=0,]
     [,1] [,2] [,3]
[1,]    1    4    2
[2,]    1    0    4
[3,]    2    4    0
[4,]    2    2    4


À bien saisir pour se lancer dans la programmation R !

Anne Eboum
Messages : 7
Enregistré le : 07 Aoû 2012, 13:21

Messagepar Anne Eboum » 30 Aoû 2012, 09:43

Bonjour,

je sais que cette discussion est très vieille donc j'espère qu'elle va remonter quand même.
J'ai un petit soucis moi je voudrais supprimer les lignes ou deux conditions sur deux colonnes différentes doivent être réunis.
Mon tableau de données initiales s'appelle par exemple donnees et je veux créer un tableau tab à partir de celui-ci où j'aurais supprimer toutes les lignes où sur la colonne 3 il est écrit "dense" ET la colonne 4 il est écrit "carree".
Alors quand je tape :
tab <- donnees2[donnees2[,3]!="dense_1D" & donnees2[,4]!="carree",]

il me supprime toutes les lignes ou il y a marqué dense_1D OU carree
je voudrais qu'il me supprime la ligne que lorsque les deux conditions en même temps sont réunis.

Cordialement.
Ne craignez pas d'être lent craignez seulement d'être a l'arrêt

Vincent Guillemot
Messages : 451
Enregistré le : 05 Mai 2010, 15:11

Messagepar Vincent Guillemot » 30 Aoû 2012, 11:48

C'est normal : voir cet article par exemple http://fr.wikipedia.org/wiki/Lois_de_De_Morgan

Pour obtenir le résultat escompté, tu peux essayer

Code : Tout sélectionner

tab <- donnees2[!(donnees2[,3]=="dense_1D" & donnees2[,4]=="carree"),]

ou de façon équivalente

Code : Tout sélectionner

tab <- donnees2[donnees2[,3]!="dense_1D" | donnees2[,4]!="carree",]


Bon courage,
V.

Anne Eboum
Messages : 7
Enregistré le : 07 Aoû 2012, 13:21

Messagepar Anne Eboum » 30 Aoû 2012, 12:16

Vincent Guillemot a écrit :C'est normal : voir cet article par exemple http://fr.wikipedia.org/wiki/Lois_de_De_Morgan

Pour obtenir le résultat escompté, tu peux essayer

Code : Tout sélectionner

tab <- donnees2[!(donnees2[,3]=="dense_1D" & donnees2[,4]=="carree"),]

ou de façon équivalente

Code : Tout sélectionner

tab <- donnees2[donnees2[,3]!="dense_1D" | donnees2[,4]!="carree",]


Bon courage,
V.


Merci beaucoup. :D
Ne craignez pas d'être lent craignez seulement d'être a l'arrêt

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

Re: suppression de lignes sous conditions

Messagepar Anais Payen » 14 Mar 2019, 10:16

Bonjour à tous,

Je me permets de faire remonter cette discussion car je rencontre un problème équivalent.
J'ai un data.frame de cette forme :

Code : Tout sélectionner

   drug_source_value count
1                 0 15838
2     3400309092459  8098
3     3400302558129  4058
4     3400302558167  3586
5     3400800758163  3323
6     3400903848168  2856


Je souhaiterais supprimer toutes les lignes qui commencent par 34003 dans la colonne "drug_source_value, et j'ai essayé ces 2 codes :

Code : Tout sélectionner

INC_sanshomeo <- INC[!(INC$drug_source_value=="34003")]
INC_sanshomeo <- INC[!which(INC$drug_source_value=="34003"),]


Pour le 1er, il me dit : "undefined columns selected"
Pour le second, lorsque je souhaite visualiser le tableau il note : "No data available in table"


Est ce que quelqu'un aurait une idée?

Par avance, je vous remercie.

Anais

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

Re: suppression de lignes sous conditions

Messagepar Anais Payen » 14 Mar 2019, 10:36

Petite correction de mon message précédent, je pense que le fait de chercher un début de code (5chiffres) dans ma colonne "drug_source_value" alors que mes codes font 13 chiffres, fait que ma commande ne fonctionne pas.

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

Re: suppression de lignes sous conditions

Messagepar Pierre-Yves Berrard » 14 Mar 2019, 11:26

C'est la raison effectivement. Il faut utiliser la fonction substr.
PY

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

Re: suppression de lignes sous conditions

Messagepar Anais Payen » 14 Mar 2019, 14:12

Merci Pierre-Yves Berrard pour votre réponse.

Mais je ne souhaite pas extraire une partie des élements de mon chiffre.

J'ai reussi grâce à la fonction grep :

Code : Tout sélectionner

INC_homeo <- grep("34003", INC$drug_source_value, ignore.case = TRUE)


ce qui me donne les lignes que je ne souhaiterais pas garder, mais je ne sais pas comment le coder pour obtenir un tableau sans ses lignes...

Merci d'avance

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

Re: suppression de lignes sous conditions

Messagepar Pierre-Yves Berrard » 14 Mar 2019, 14:54

Code : Tout sélectionner

INC_sanshomeo <- INC[substr(INC$drug_source_value, 1, 5) != "34003", ]
PY

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

Re: suppression de lignes sous conditions

Messagepar Anais Payen » 14 Mar 2019, 15:05

Super! Votre formule fonctionne à merveille! Je vous en remercie!

Code : Tout sélectionner

INC_homeo <- grep("34003", INC$drug_source_value, ignore.case = TRUE)

Code : Tout sélectionner

INC_sanshomeo<- INC[INC$drug_source_value %in% INC_homeo,]


Sauriez vous m'expliquez ce qu'il me manque dans ma 2eme ligne de code pour obtenir la même réponse que vous?
Lorsque je mets un ! devant mon %in% pour avoir la condition qui ne contient pas, cela ne fonctionne pas..

Merci d'avance

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

Re: suppression de lignes sous conditions

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

Anais Payen a écrit :Sauriez vous m'expliquez ce qu'il me manque dans ma 2eme ligne de code pour obtenir la même réponse que vous?

En fait, il y en a trop. ;-)

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 "!")

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.
PY

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

Re: suppression de lignes sous conditions

Messagepar Anais Payen » 14 Mar 2019, 15:20

Pierre-Yves Berrard a écrit :

Code : Tout sélectionner

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


Lorsque vous indiquez 1 à 5 c'est bien parce que mon code fait 5 chiffres?


Retourner vers « Questions en cours »

Qui est en ligne

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