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 :

Match 'date&temps' dans 2 data.frames différents


Sujet :

R

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Match 'date&temps' dans 2 data.frames différents
    Bonjour,

    Après quelques semaines durant lesquelles j'ai pu me débrouiller sans votre aide, je reviens vers vous.
    En effet, je rencontre des problèmes avec la fonction Match que je n'arrive pas à implémenter dans mon code.

    Infos pour comprendre la situation:

    J'étudie des machines et leurs pannes et reg.meas.x représente 1 un de mesure moyennées sur 10 min et at.reg.status.modif représente les pannes de la machines. x est l'ID de la machine et at représente les lettres du pays dans laquelle elle se trouve (ex: fr).

    Si vous me le permettez j'ai donc 3 questions pour la communauté:
    • est-il possible de faire matcher 2 objets 'date&heure' l'un issu d'un data.frame "normal" (cf pj reg.meas.80113.jpg) et l'autre d'un data.frame auquel j'aurais appliqué une fonction du type "which(at.reg.status.modif.jpg$WEC.ID==80113" ou "subset(at.reg.status.modif,WEC.ID==80113)" pour réduire sa taille (cf at.reg.status.modif.jpg) mais sans l'enregistrer en tant que nouvelle variable?
      L'objectif: sortir la valeur d'une colonne de la ligne qui aura matché dans reg.meas.80113 pour la copier dans at.reg.status.modif dans sur la même ligne que la "date&temps" correspondant
    • comme j'aimerais répéter l'opération pour d'autres WEC.ID (286) et associer les résultats d'un autre reg.meas.x (ex: reg.meas.80121) avec le même at.reg.status.modif, est-il possible d'implémenter ce type de fonction dans une fonction apply?
    • mon dernier soucis réside dans le fait que la fonction match cherche une valeur exacte. Pour ma part, les valeurs de temps peuvent ne pas exister et j'aimerais ainsi que la fonction prenne la valeur de temps la plus proche. Est-ce possible?


    Ne voulant pas vous ennuyer avec le sujet de mon étude, je vous ai fait un résumé qui peut paraitre obscure. Aussi, vous trouverez mon code ci-dessous ainsi que des screenshots de mes données (qui ne peuvent être directement transmises dans un soucis de confidentialité mais surtout de taille).

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    # Load status code and detect failures
    #--------------------------------------------------------------------------------------------------
     
    load(paste(WD,"/country.RData",sep=""))
    n.country=nrow(country)
     
    ID_Recognize_funct<-function(x){
      position<-match(x,wec.list$WEC.ID)
      return (wec.list$REGUARD.WEC.NAME[position])}
    ID_Recognize2_funct<-function(x){
      position<-match(x,wec.list$REGUARD.WEC.NAME)
      return (c(wec.list$WEC.ID[position]))}
     
    wind_speed_match_funct<-function(x){ eval(parse(text=paste("position<-match(",x,",reg.meas.modif",list.unique.wec.country[j],"[,4]",sep="")))
      }
     
    WEC.REGUARD.NAME=as.character(ID_Recognize_funct(exp.design[,1]))
    exp.design.modif=cbind(exp.design,data.frame(WEC.REGUARD.NAME))
    rm(exp.design)
     
    for(i in 1:n_country){
      load(paste(WD,"/",country[i,1],".reg.status.RData",sep=""))
      WEC_ID_expr=parse(text=paste("WEC.ID<-ID_Recognize2_funct(",country[i,1],".reg.status[,1])",sep=""))
      eval(WEC_ID_expr)
      country_status_modif_expr=parse(text=paste(country[i,1],".reg.status.modif<-cbind(",country[i,1],".reg.status,WEC.ID)",sep=""))
      eval(country_status_modif_expr)
      eval(parse(text=paste("rm(",country[i,1],".reg.status)",sep="")))
      expression_list_na_expr=parse(text=paste("list.na","<-which(is.na(",country[i,1],".reg.status.modif$WEC.ID)==TRUE)",sep=""))
      eval(expression_list_na_expr)
      if(length(list.na)!=0) eval(parse(text=paste(country[i,1],".reg.status.modif","<-",country[i,1],".reg.status.modif","[-list.na,]",sep="")))
      list_unique_wec_country_expr=parse(text=paste("list.unique.wec.country<-unique(",country[i,1],".reg.status.modif$WEC.ID)",sep=""))
      eval(list_unique_wec_country_expr)
      list.unique.wec.country<-na.omit(list.unique.wec.country)
      n.list.unique.wec.country=length(list.unique.wec.country)
        for(j in 1:n.list.unique.wec.country){
          match.list.exp.design<-na.omit(match(list.unique.wec.country[j],exp.design.modif[,1]))
          match_list_status_expr=parse(text=paste("match.list.status<-which(",country[i,1],".reg.status.modif$WEC.ID==",list.unique.wec.country[j],")",sep=""))
          eval(match_list_status_expr)
          if(length(match.list.exp.design)==0){
            rm_absent_wec_expr=parse(text=paste(country[i,1],".reg.status.modif<-",country[i,1],".reg.status.modif[-",match.list.status,",]",sep=""))
            eval(rm_absent_wec_expr)}
          else {
            load(paste(WD,"/reg.meas.",list.unique.wec.country[j],".RData",sep=""))
            eval(parse(text=paste("valeur<-by(",country[i,1],".reg.status.modif,",country[i,1],".reg.status.modif[which(",country[i,1],".reg.status.modif==",list.unique.wec.country[j],"),2],wind_spee_match_funct(x))")))
    #         eval(parse(text=paste("wind_speed_match_funct(",country[i,1],".reg.status.modif)",sep="")))
            }
        }
    }
    En espérant que quelqu'un puisse m'aider.

    D'ailleurs, si vous avez besoin de précisions, n'hésitez pas à en demander.

    En vous remerciant par avance.

    Arnaud

    Ps: s'agissant du nom de mes colonnes de data.frame, je sais qu'elles ne sont pas les plus adaptées et je compte les modifier.
    Images attachées Images attachées   

Discussions similaires

  1. grep dans un data.frame
    Par Isabella83 dans le forum R
    Réponses: 2
    Dernier message: 14/06/2012, 09h06
  2. Rajout d'une colonne dans une data frame
    Par kalapiso dans le forum R
    Réponses: 2
    Dernier message: 23/10/2011, 14h43
  3. Suppression de colonnes dans un data.frame
    Par ricoben dans le forum R
    Réponses: 1
    Dernier message: 13/04/2010, 17h13
  4. Mean par colonne dans une data frame
    Par manoir dans le forum R
    Réponses: 3
    Dernier message: 19/06/2009, 11h06
  5. Réponses: 2
    Dernier message: 14/11/2008, 14h53

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