Appartenance d'un élément à une liste..

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

Juliette Fabre
Messages : 32
Enregistré le : 09 Mar 2007, 12:24

Appartenance d'un élément à une liste..

Messagepar Juliette Fabre » 16 Mar 2007, 10:02

Bonjour!

Nouveau jour nouvelle question .. :)

Je cherche à tester la non appartenance d'une valeur numérique à une liste de valeurs numériques..

En fait j'ai un tableau avec une variable numérique "Lignée" répétée, et je souhaite supprimer de ce tableau les individus pour lesquels la valeur de la variable "Lignée" appartient à une liste de lignées..

J'ai essayé : Tableau <- Tableau [ Tableau$Lignee != Liste , ]
Mais il supprime un seul individu par lignée de la liste, ou parfois aucun..

Une idée? N'y a-t-il pas d'opérateur d'appartenance?

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

Messagepar Logez Maxime » 16 Mar 2007, 10:17

Bonjour,


Ce qui se passe ici c'est qu'il recycle liste dans tes conditions, si liste contient trois éléments, il compare la première valeur de lignée avec la première valeur de liste la deuxième valeur de lignéee avec la deuxième valeur de liste, la troisième valeur de lignée avec la troisième valeur de liste, la quatrième valeur de lignée avec la première valeur de liste, etc. Il ne regarde pas si ta valeur de lignée est comprise dans la plage de valeurs possible.

Je te conseille un truc du genre :

Code : Tout sélectionner

test <- data.frame (lignee = rep(1:4,each=2), y = rnorm(8))
test
  lignee          y
1      1  1.1093368
2      1 -0.2071036
3      2 -0.2966096
4      2 -1.2871013
5      3  0.5817416
6      3  0.7866766
7      4  0.4573720
8      4 -0.5973431
liste <- c(1,3)
test[test$lignee%in%liste,]
  lignee          y
1      1  1.1093368
2      1 -0.2071036
5      3  0.5817416
6      3  0.7866766


Je pense que ça doit répondre à ta question, sinon tu peux aussi utiliser des fonctions du genre subset ou tu spécifies les conditions.

Maxime

E.V. Dennst

Re: Appartenance d'un élément à une liste..

Messagepar E.V. Dennst » 16 Mar 2007, 10:17

Juliette Fabre a écrit :N'y a-t-il pas d'opérateur d'appartenance?

%in%
?"%in%"

%in% est un alias de match()

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

Messagepar Logez Maxime » 16 Mar 2007, 10:20

Re,

%in%
?"%in%"

%in% est un alias de match()


Tout a fait mais il est ici plus facile a utiliser que le match et se prête tout a fait à ce genre de problème d'appartenance de valeurs à une liste de valeurs.

Maxime

Juliette Fabre
Messages : 32
Enregistré le : 09 Mar 2007, 12:24

Messagepar Juliette Fabre » 16 Mar 2007, 10:43

Super, j'avais essayé "in" mais pas pensé à "%in%" !

Bon alors ca marche a priori, mais pas avec ma liste Liste :
si je fais
Tableau <- Tableau [ !(Tableau$Lignee%in%c(40,60)) , ] , ca marche

mais si je fais
Tableau <- Tableau [ !(Tableau$Lignee%in%Liste , ] ca marche pas!

Pourtant Liste est vraiment du même type que c(40,60) :

> Liste
[1] 40 60 94 109

> str(c(40,60))
num [1:2] 40 60

> str(Liste)
num [1:4] 40 60 94 109


Grrrrr..

Juliette Fabre
Messages : 32
Enregistré le : 09 Mar 2007, 12:24

Messagepar Juliette Fabre » 16 Mar 2007, 10:49

Mea culpa ça marche bien...... :D

Désolée d'encombrer le forum avec des messages inutiles!!! :roll:

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 16 Mar 2007, 12:38

Voir aussi is.element qui s'appuie également sur match mais qui est mon interface favorite.

Renaud

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

Messagepar Logez Maxime » 16 Mar 2007, 12:44

Re,


Personellement je trouve %in% plus explicit mais de toute façon les deux font exactement la même chose :

Code : Tout sélectionner

is.element
function (el, set)
match(el, set, 0) > 0
# et
eval(as.name("%in%"))
function (x, table)
match(x, table, nomatch = 0) > 0


Maxime


Retourner vers « Questions en cours »

Qui est en ligne

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