IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Requête conditionnelle ?


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 2
    Par défaut Requête conditionnelle ?
    Bonjour,

    Je recherche de l'aide pour réaliser une action sous R. J'ai un tableau de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Var1        Var2   Var3	
    2145,76     26     14
    8243,39     30     14
    2865,46     30     14
    2735,98     30     16
    Et par exemple, j'aimerais récupérer les valeur de Var1 sachant que Var2=30 et Var3=14 et ainsi de suite pour chacune des combinaisons de Var2 et Var3.

    J'ai tenté plusieurs choses avec une boucle et la fonction if mais je ne sais pas comment lui dire de récupérer la valeur de Var1 qui correspond aux valeurs que j'assigne à Var2 et Var3...

    Si vous avez une idée, je suis preneur !

    Merci.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 9
    Par défaut
    Si ton tableau s'appelle M, tu peux utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    U<-unique(M[,c('var2','var3')])
    pour récupérer tous les couples (var1,var2) existant dans tes données. Ca te servira pour ta boucle : u<-dim(U)[2]; for(i in 1:u) ...

    Pour récupérer les données, j'imagine qu'il faut que tu crées une liste (L<-list()) et que, pour tous les i, tu stockes dedans un vecteur issu de M$var1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    L[[i]]<-M$var1[M$var2==U$var2[i]&M$var3==U$var3[i]]
    devrait faire l'affaire j'imagine.

    Mais il y a sans doute plus élégant et plus simple.

  3. #3
    Membre chevronné
    Femme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Par défaut
    Bonjour,
    je vous propose d’utiliser:
    et d'indexer les vecteurs (cf. par exemple http://cran.r-project.org/doc/contrib/Short-refcard.pdf):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    d <- data.frame(Var1=c(2145, 8243.39, 2865.46, 2735.98), Var2=c(26,rep(30,3)), Var3=c(rep(14,3),16))
    (V1 <- d[which(d$Var2==30 & d$Var3==14),1])
    Bonne journée

  4. #4
    Membre Expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Par défaut
    Bonjour,

    Il y a également la fonction split qui permet de directement découper une data.frame selon un ou plusieurs facteurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    > tmp <- data.frame(Var1=runif(4, 2000, 9000),
    +                   Var2=sample(c(26, 30), 4, replace=TRUE),
    +                   Var3=sample(c(14, 16), 4, replace=TRUE))
    > tmp
          Var1 Var2 Var3
    1 2707.683   26   16
    2 8098.849   30   16
    3 6161.392   30   14
    4 7880.800   26   16
    > split(tmp, list(tmp$Var2, tmp$Var3))
    $`26.14`
    [1] Var1 Var2 Var3
    <0 lignes> (ou 'row.names' de longueur nulle)
     
    $`30.14`
          Var1 Var2 Var3
    3 6161.392   30   14
     
    $`26.16`
          Var1 Var2 Var3
    1 2707.683   26   16
    4 7880.800   26   16
     
    $`30.16`
          Var1 Var2 Var3
    2 8098.849   30   16
    L'objet retourné étant une liste, il peut facilement être traité ensuite à l'aide des fonctions de la famille des apply.

  5. #5
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 2
    Par défaut
    Merci pour vos réponses !
    J'ai réussi maintenant !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL2K] Faire un requête conditionnelle pour un CURSOR
    Par zooffy dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 07/08/2007, 14h00
  2. [MySQL] Pb de requête conditionnelle
    Par jakkihm dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/03/2007, 21h40
  3. requêtes "conditionnelles"
    Par _marabout dans le forum SQL Procédural
    Réponses: 11
    Dernier message: 02/04/2006, 14h46
  4. Suppression avec sous-requête conditionnelle
    Par Magnus dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/10/2005, 10h39
  5. suppression avec sous requête conditionnelle
    Par melmel dans le forum Requêtes
    Réponses: 8
    Dernier message: 18/03/2004, 23h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo