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 :

Fusionner plusieurs tables


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Mali

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 11
    Par défaut Fusionner plusieurs tables
    Bonjour,
    En fait j'ai dans mon répertoire un certain nombre de tables de tailles différentes. Par exemple avec 3 tables:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    tab1 <- structure(list(
      time= structure(1:10, .Label = c("2017-04-27 19:39:32.036","2017-04-28 09:20:13.222","2017-04-28 09:20:54.613",
                                       "2017-04-28 11:30:58.015","2017-04-28 11:31:28.334","2017-04-28 11:32:25.411",
                                       "2017-04-28 11:33:50.444","2017-04-28 14:47:42.557","2017-04-28 14:49:37.136",
                                       "2017-04-28 14:49:46.070"), class = "factor"),
      value = structure(c(2L,1L,2L,1L,2L,1L,2L,1L,2L,1L), .Label = c("ON", "OFF"), class = "factor")),
      .Names = c("time","value"), class = "data.frame", row.names = c(NA,-10L))
    tab1$time<- as.POSIXct(tab1$time, format = "%Y-%m-%d %H:%M:%S")


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    tab2 <- structure(list(
      time= structure(1:10, .Label = c("2017-05-02 15:06:38.546","2017-05-02 15:09:13.441","2017-05-02 15:11:12.512",
                                       "2017-05-02 15:11:45.824","2017-05-02 15:13:15.581","2017-05-02 15:13:18.476",
                                       "2017-05-02 15:15:13.689","2017-05-02 15:15:36.948","2017-05-02 15:16:21.762",
                                       "2017-05-02 15:21:11.759"), class = "factor"),
      value = structure(c(2L,1L,2L,1L,2L,1L,2L,1L,2L,1L), .Label = c("ON", "OFF"), class = "factor")),
      .Names = c("time","value"), class = "data.frame", row.names = c(NA,-10L))
    tab2$time<- as.POSIXct(tab2$time, format = "%Y-%m-%d %H:%M:%S")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    tab3 <- structure(list(
      time= structure(1:10, .Label = c("2017-04-27 15:39:35.349","2017-04-28 09:20:08.501","2017-04-28 09:20:25.020",
                                       "2017-04-28 11:30:52.417","2017-04-28 11:30:56.314","2017-04-28 11:33:26.238",
                                       "2017-04-28 11:33:29.545","2017-04-28 14:47:30.948","2017-04-28 14:47:35.278",
                                       "2017-04-28 14:55:54.692"), class = "factor"),
      value = structure(c(2L,1L,2L,1L,2L,1L,2L,1L,2L,1L), .Label = c("OPEN", "CLOSED"), class = "factor")),
      .Names = c("time","value"), class = "data.frame", row.names = c(NA,-10L))
    tab3$time<- as.POSIXct(tab3$time, format = "%Y-%m-%d %H:%M:%S")
    Au final je souhaiterai les fusionner pour obtenir une seule table tout sans perte d'aucune information sur la date, car à chaque timestamps doit correspondre un événement.
    Exemple de la table finale que je souhaite obtenir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    tab=structure(list(
      time= structure(1:13, .Label = c("2017-04-27 15:39:35","2017-04-27 19:39:32","2017-04-28 09:20:08",
                                       "2017-04-28 09:20:13","2017-04-28 09:20:25","2017-04-28 09:20:54",
                                       "2017-04-28 11:30:52","2017-04-28 11:30:56","2017-04-28 11:30:58",
                                       "2017-04-28 11:31:28","2017-04-28 11:32:25","2017-04-28 11:33:26",
                                       "2017-04-28 11:33:29"), class = "factor"),
      capteur1 = structure(c(3L,2L,3L,1L,3L,2L,3L,3L,1L,2L,1L,3L,3L), .Label = c("ON", "OFF","NA"), class = "factor"),
      capteur2 = structure(c(3L,3L,3L,3L,3L,3L,3L,3L,3L,3L,3L,3L,3L), .Label = c("ON", "OFF","NA"), class = "factor"),
      capteur3 = structure(c(2L,3L,1L,3L,2L,3L,1L,2L,3L,3L,3L,1L,2L), .Label = c("OPEN", "CLOSED","NA"), class = "factor")),
      .Names = c("time","capteur1","capteur2","capteur3"), class = "data.frame", row.names = c(NA,-13L))

    Merci,
    Korera

  2. #2
    Membre chevronné
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Par défaut
    Bonjour,

    une possibilité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (i in 1:3) 
      eval(parse(text = sprintf("colnames(tab%1$d)[2] <- 'capteur%1$d'", i)))
    Reduce(function(x, y) merge(x, y, all = T), list(tab1, tab2, tab3))
    cdlt

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Mali

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 11
    Par défaut
    Merci tototode !
    J'essaie d'adapter ton code aux 36 tables que j'ai

  4. #4
    Membre chevronné
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Par défaut
    Bonjour,

    une possibilité, si tes noms de tables ont un pattern commun, tab1, tab2, tabn+1, etc.
    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
    # pour l'exemple
    tab1 <- structure(list(
    time= structure(1:10, .Label = c("2017-04-27 19:39:32.036","2017-04-28 09:20:13.222","2017-04-28 09:20:54.613",
    "2017-04-28 11:30:58.015","2017-04-28 11:31:28.334","2017-04-28 11:32:25.411",
    "2017-04-28 11:33:50.444","2017-04-28 14:47:42.557","2017-04-28 14:49:37.136",
    "2017-04-28 14:49:46.070"), class = "factor"),
    value = structure(c(2L,1L,2L,1L,2L,1L,2L,1L,2L,1L), .Label = c("ON", "OFF"), class = "factor")),
    .Names = c("time","value"), class = "data.frame", row.names = c(NA,-10L))
    tab1$time<- as.POSIXct(tab1$time, format = "%Y-%m-%d %H:%M:%S")
     
    for (i in 2:36) 
      assign(sprintf("tab%d", i), tab1)
     
    # debut du code
    nms <- ls(pattern = "tab\\d+")
    nms <- nms[order(sprintf("%2s", gsub("\\D+", "", nms)))]
     
    for (i in nms)
      eval(parse(text = sprintf("colnames(%s)[2] <- 'capteur%s'", i, gsub("\\D+","",i))))
     
    l1 <- lapply(nms, get)
    # ou : eval(parse(text = sprintf("list(%s)", paste(nms, collapse = ","))))
    Reduce(function(x, y) merge(x, y, all = T), l1)
    cdlt

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

Discussions similaires

  1. Fusionner plusieurs tables avec nombre de champs différents
    Par poussinvert dans le forum Requêtes
    Réponses: 7
    Dernier message: 31/07/2012, 08h56
  2. [AC-2010] Comment fusionner plusieurs tables
    Par oreoolep dans le forum VBA Access
    Réponses: 3
    Dernier message: 24/12/2011, 21h34
  3. Réponses: 1
    Dernier message: 16/10/2011, 17h21
  4. Réponses: 3
    Dernier message: 16/12/2010, 09h49
  5. Petite interface pour fusionner plusieurs tables
    Par mouche dans le forum VBA Access
    Réponses: 2
    Dernier message: 30/08/2007, 14h32

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