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 :

Remplir data.frame sous conditions (avec autre data.frame)


Sujet :

R

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Apprenti bioinformatique
    Inscrit en
    Mars 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Apprenti bioinformatique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2015
    Messages : 17
    Points : 35
    Points
    35
    Par défaut Remplir data.frame sous conditions (avec autre data.frame)
    Bonjour,

    je suis débutant en R (mais alors vraiment débutant^^), et je suis face à une (petite ?) colle.

    J'ai deux tableaux, le premier (deux colonnes, à défaut de pouvoir faire un vrai tableau associatif ?) sert de référence pour remplir une colonne du second. En version raccourci, ça donne quelque chose comme :

    id value ref1 ref2 id value
    a x aaa aab d x
    b x bbb bbc b x
    c y ccc ccd a
    d x ddd dde c
    e y eee eef e


    L'idée serait de remplir la colonne "value" du second tableau (quand il n'y a pas déjà des infos), en prenant les infos "value" du premier, les deux étant liés par l'id (tous les ids ne se retrouvent pas de part et d'autres, donc il n'est pas possible de tout remplir).
    C'est quelque chose qui serait peut-être plus simple en utilisant des tableaux associatifs (sous Perl par exemple), mais j'aimerais savoir si c'est faisable sous R (dans le sens pas plus compliqué qu'avec Perl par exemple) (et je fais tout mon travail sur R, ça m’embêterait de changer de langage juste pour un détail).

    J'avoue ne pas trop savoir comment commencer. Je serais bien parti sur un for, mais ça impliquerait une boucle dans une boucle (à moins qu'il existe un genre de if(exists), mais ça c'est chouette à utiliser avec un tableau associatif), et j'ai lu que R n'était vraiment pas le top pour boucler... Sachant qu'il s'agit de tableaux avec plusieurs dizaines de milliers de lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for (i in 1:nrow(montableau2))
    	if (montableau2$id == montableau1$id) # évidemment que ça ne marche pas, c'est juste pour l'idée. J'ai dit débutant^^
    		montableau2$value <- montableau1$value
    Et je lis en même temps que les fonctions de la famille apply serait utile, mais j'ai du mal à saisir le fonctionnement pour l'instant.

    Bref, merci d'avance, ne serait-ce que pour une piste.

  2. #2
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    Une piste peut-être pour votre problématique : le package "dplyr" qui permet tout un tas de manipulations sur les données, notamment différentes possibilités de jointures de données (http://www.rstudio.com/wp-content/up...cheatsheet.pdf).

    Exemple :

    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
    27
    28
    T1<-data.frame(id=c("a","b","c","d","e"),value=c("x","x","y","x","y"))
    T1
      id value
    1  a     x
    2  b     x
    3  c     y
    4  d     x
    5  e     y
     
    T2<-data.frame(ref1=c("aaa","bbb","ccc","ddd","eee"),ref2=c("aab","bbc","ccd","dde","eef"),id=c("d","b","a","c","e"),value=c("x","x","","",""))
    T2
      ref1 ref2 id value
    1  aaa  aab  d     x
    2  bbb  bbc  b     x
    3  ccc  ccd  a      
    4  ddd  dde  c      
    5  eee  eef  e      
     
    library(dplyr)
     
    T3<-left_join(T2,T1,by="id")
    T3
      ref1 ref2 id value.x value.y
    1  aaa  aab  d       x       x
    2  bbb  bbc  b       x       x
    3  ccc  ccd  a               x
    4  ddd  dde  c               y
    5  eee  eef  e               y
    A adapter ensuite en fonction de votre besoin précis.
    Bonne continuation !


    Cordialement,


    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Apprenti bioinformatique
    Inscrit en
    Mars 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Apprenti bioinformatique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2015
    Messages : 17
    Points : 35
    Points
    35
    Par défaut
    Bonjour,

    Merci beaucoup pour votre réponse. Cela répond exactement à mon problème : un simple dplyr::left_join et tout est réglé, vraiment nickel.

    Ce package a l'air vraiment très utile, j'ai fait pas mal de trucs qui auraient été facilités par son emploi si j'avais su. Maintenant je sais
    Bon, autour de moi, on me dit que ça correspond finalement à des raccourcis de méthodes existantes de base sous R, mais quand même, ça simplifie bien les choses.

    On m'a vendu R comme faisant le café, et bien avec ce genre d'outils, c'est pas loin !

    Merci encore!

    Cordialement,
    David R.

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

Discussions similaires

  1. [AC-2007] ERREUR 0 : Lancer une macro sous condition avec "ExecuterMacro"
    Par Octo LPO dans le forum Macros Access
    Réponses: 2
    Dernier message: 01/02/2013, 15h31
  2. [Débutant] comment remplir un tableau sous excel avec des données de DGV?
    Par spring.time dans le forum VB.NET
    Réponses: 6
    Dernier message: 26/10/2012, 20h36
  3. Remplir un DataGridView sous C# avec SQL Server
    Par Aero'ix dans le forum Windows Forms
    Réponses: 3
    Dernier message: 08/08/2012, 16h54
  4. [WD17] remplir une colonne sous condition
    Par alex1005 dans le forum WinDev
    Réponses: 3
    Dernier message: 13/07/2012, 11h32
  5. selection et écriture de données sous condition avec boucle
    Par braquin dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 25/08/2011, 09h16

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