Supprimer des modalités dans un tableau R

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

Marion Bévillon
Messages : 22
Enregistré le : 24 Mai 2013, 09:19

Supprimer des modalités dans un tableau R

Messagepar Marion Bévillon » 24 Mai 2013, 10:28

Bonjour,
Je souhaite supprimer des lignes sur mon data.frame qui correspondent en fait à 3 modalités de mon facteur "Traitement".
J'ai essayé la formule suivante pour supprimer les modalités avec Vesce:

Code : Tout sélectionner

reliqvesce=reliquats[!(reliquats$Traitement=="Vesce_0N" & reliquats$Traitement=="Triticale_Vesce_0N" & reliquats$Traitement=="Triticale_Vesce_N"),]


Seulement, quand je fais un summary:

Code : Tout sélectionner

summary(reliqvesce$Traitement)
j'ai toujours mes modalités avec la Vesce présentes dans le nouveau data.frame alors qu'aucun message d'erreur n'est apparu...

Pour pouvoir avancer dans mes analyses, j'ai fait l'inverse, c'est-à-dire que j'ai créé un nouveau data.frame en sélectionnant les modalités que je voulais garder:

Code : Tout sélectionner

reliqvesce=droplevels(subset(reliquats, Traitement %in% c("Pois_0N","Trefle_0N","Triticale_0N","Triticale_N","Triticale_Pois_0N","Triticale_Pois_N","Triticale_Trefle_0N","Triticale_Trefle_N")))


Mais est-ce qu'il existe une formule qui permet de demander à R de supprimer les modalités qui ne nous intéressent pas?

Merci d'avance,
Marion.

Eric Casellas
Messages : 767
Enregistré le : 06 Jan 2009, 14:59

Messagepar Eric Casellas » 24 Mai 2013, 10:40

Bonjour,

Code : Tout sélectionner

> reliquats <- data.frame(Traitement=c("toto", "tutu", "tata"), stringsAsFactors=FALSE)
> reliquats[!reliquats$Traitement=="toto", ] # ne garde que ce qui est différent
[1] "tutu" "tata"
> reliquats[reliquats$Traitement=="toto", ] # ne garde que ce qui est recherché
[1] "toto"

cet exemple simple montre que c'est de la même façon que tu peut sélectionner ou supprimer une modalité (la différence entre les deux est qu'on utilise la condition inverse avec le !)

apres attention si tu utilise des colonnes de type factor quand tu va faire une selection il va conserver tous les levels initiaux sauf si tu fait un droplevels
Eric

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Messagepar François Bonnot » 24 Mai 2013, 12:21

Mais est-ce qu'il existe une formule qui permet de demander à R de supprimer les modalités qui ne nous intéressent pas?

Oui, il faut utiliser factor() car la sélection retire les données, par les niveaux du facteur:

Code : Tout sélectionner

(f <- factor(letters[1:3]))
summary(f)
(g <- f[f!="b"])
summary(g)
(h <- factor(g))
summary(h)

Edit: factor() ou droplevels() comme le suggère Eric.
François

Marion Bévillon
Messages : 22
Enregistré le : 24 Mai 2013, 09:19

Messagepar Marion Bévillon » 24 Mai 2013, 13:38

Super, merci!! Ca ressemble un peu à la formule que j'ai faite au début mais cette fois, ça marche :)
Par contre, dans mes graphes et dans le summary, les modalités que je supprime restent affichées (mais avec un effectif de zéro). Par exemple, si je supprime seulement Vesce_0N, j'obtiens ça:

Code : Tout sélectionner

 summary(reliqvesce$Traitement)
            Pois_0N           Trefle_0N        Triticale_0N
                  6                   6                   7
        Triticale_N   Triticale_Pois_0N    Triticale_Pois_N
                  8                   6                   6
Triticale_Trefle_0N  Triticale_Trefle_N  Triticale_Vesce_0N
                  6                   6                   3
  Triticale_Vesce_N            Vesce_0N
                  3                   0

Et on observe toujours Vesce_0N tout à la fin. C'est la formule qui veut ça ou j'ai oublié une manip?

Nicolas Péru
Messages : 1408
Enregistré le : 07 Aoû 2006, 08:13

Messagepar Nicolas Péru » 24 Mai 2013, 13:41

Si tu as utilisé la fonction factor() alors tu as loupé qqchose.
Sinon tu peux faire droplevels(tontableau). tontableau étant l'objet une fois la sélection effectuée.

Pour sélectionner, tu peux passer par la fonction subset.

Delalande Lucas
Messages : 40
Enregistré le : 14 Déc 2017, 08:48

Re:

Messagepar Delalande Lucas » 15 Déc 2017, 14:12

Bonjour,
et pour une requete multiple ?


[quote="Eric Casellas"]Bonjour,

[code]> reliquats <- data.frame(Traitement=c("toto", "tutu", "tata"), stringsAsFactors=FALSE)
> reliquats[!reliquats$Traitement=="toto", ] # ne garde que ce qui est différent
[1] "tutu" "tata"
> reliquats[reliquats$Traitement=="toto", ] # ne garde que ce qui est recherché"


Ok, mais pour garder ce qui est different de "toto" ET de "tata", par exemple (ne garder que tutu dans ce cas) ?

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Supprimer des modalités dans un tableau R

Messagepar Logez Maxime » 15 Déc 2017, 14:19

Bonjour,

Code : Tout sélectionner

reliquats[!reliquats$Traitement %in% c("toto", "tata"), ]


Une remarque générale, il vaut mieux créer un nouveau fil que de répondre à un (très) ancien post et ne pas oublier de ce servir des balises pour plus de clarté dans le message.

Cordialement,
Maxime


Retourner vers « Questions en cours »

Qui est en ligne

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