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 :

Comment remodeler un data frame ?


Sujet :

R

  1. #1
    Membre averti
    Homme Profil pro
    Epitech
    Inscrit en
    Mai 2019
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Epitech

    Informations forums :
    Inscription : Mai 2019
    Messages : 33
    Par défaut Comment remodeler un data frame ?
    Bonjour,

    J'ai un data frame et j'aimerais changer la disposition des données d'une certaines manière.

    Voici un exemple de mon data frame :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    df <- data.frame("Name" = c("a", "a", "b", "b", "b"),
                     "Sname" = c("az", "aze", "ba", "bo", "bi"),
                     "Number" = c(1, 2, 1, 4, 5),
                     "X" = c(100, 100, 100, 100, 100), stringsAsFactors = FALSE)
    Voici un exemple du résultat attendu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    result <- data.frame("a" = c("az", "aze", NA),
                         "a-Number" = c(1, 2, NA),
                         "b" = c("ba", "bo", "bi"),
                         "b-Number" =c(1, 4, 5), stringsAsFactors = FALSE)
    Cordialement,

    Arkning

  2. #2
    Membre Expert
    Inscrit en
    Novembre 2009
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 707
    Par défaut Comment remodeler un data frame ?
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    df <- data.frame("Name" = c("a", "a", "b", "b", "b"),
                     "Sname" = c("az", "aze", "ba", "bo", "bi"),
                     "Number" = c(1, 2, 1, 4, 5),
                     "X" = c(100, 100, 100, 100, 100), stringsAsFactors = FALSE)
    result <- data.frame("a" = c("az", "aze", NA),
                         "a-Number" = c(1, 2, NA),
                         "b" = c("ba", "bo", "bi"),
                         "b-Number" =c(1, 4, 5), stringsAsFactors = FALSE)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    > df
      Name Sname Number   X
    1    a    az      1 100
    2    a   aze      2 100
    3    b    ba      1 100
    4    b    bo      4 100
    5    b    bi      5 100
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    > result
         a a.Number  b b.Number
    1   az        1 ba        1
    2  aze        2 bo        4
    3 <NA>       NA bi        5
    • Avec la fonction reshape() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    df$RepNo <- sequence(rle(as.vector(df$Name))$lengths)
    result2 <- reshape(data=df[,-4],
                       idvar="RepNo",
                       v.names=c("Sname","Number"),
                       timevar="Name",
                       direction="wide")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    > result2
      RepNo Sname.a Number.a Sname.b Number.b
    1     1      az        1      ba        1
    2     2     aze        2      bo        4
    5     3    <NA>       NA      bi        5
    • ou "à la main" (notez la fonction setNames() qui permet de renommer les variables lors de la création du dataframe) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    > dfa <- setNames(df[which(df$Name == "a"),c("Sname","Number")],c("a","a-Number"))
    > dfa$No <- sequence(nrow(dfa))
    > dfa
        a a-Number No
    1  az        1  1
    2 aze        2  2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    > dfb <- setNames(df[which(df$Name == "b"),c("Sname","Number")],c("b","b-Number"))
    > dfb$No <- sequence(nrow(dfb))
    > dfb
       b b-Number No
    3 ba        1  1
    4 bo        4  2
    5 bi        5  3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    > result3 <- merge(dfa,dfb,by="No",all=TRUE)
    > result3
      No    a a-Number  b b-Number
    1  1   az        1 ba        1
    2  2  aze        2 bo        4
    3  3 <NA>       NA bi        5
    Cordialement,

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/05/2019, 09h39
  2. Réponses: 11
    Dernier message: 03/05/2019, 17h21
  3. Réponses: 1
    Dernier message: 21/05/2014, 10h08
  4. [wxPython][wxFrame]Comment fermer proprement une frame ?
    Par Screameur dans le forum wxPython
    Réponses: 4
    Dernier message: 12/05/2005, 19h49
  5. Comment changer border = dialog frame
    Par lykim dans le forum MFC
    Réponses: 2
    Dernier message: 23/03/2005, 12h14

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