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 :

Modifier les modalités d'une colonne


Sujet :

R

  1. #1
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2018
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2018
    Messages : 180
    Points : 54
    Points
    54
    Par défaut Modifier les modalités d'une colonne
    Bonjour,

    Je dispose d'un dataframe qui représente :
    - un identifiant de carreau
    - une année (2006 ou 2012)
    - une colonne de facteurs (A, B, ou C)
    - une valeur numérique

    Voici un code reproductible qui génère un dataframe semblable au miens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    df = data.frame(id_carreau = c("car1", "car1", "car1", "car1", "car2", "car2"), annee = c("2006", "2006", "2012", "2006", "2012", "2012"), facteur = c("A", "B", "A", "C", "A", "C"))
    Ce dernier se présente de cette forme :
    https://zupimages.net/viewer.php?id=20/47/wv3w.png

    On remarque que les modalités de la colonne "facteur" sont répartis de manière aléatoire dans les années de mes carreaux. Certaines années dans certains carreaux, les 3 facteurs n'apparaissent pas. Je voudrais trouver un moyen d'afficher systématiquement tous les facteurs pour chaque année, et pour chaque carreau. L'idée, c'est d'arriver à cette forme :
    https://zupimages.net/viewer.php?id=20/47/9pkk.png

    Evidement, les valeurs non renseignées deviennent des NA.

    Est-il possible de faire ceci dans R ?

    Un grand merci.

  2. #2
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Transposition
    Bonjour,

    En jouant avec les transpositions :

    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
    50
    51
    52
    df1 <- read.table(header = TRUE, text = "
    id_carreau annee facteur valeur
          car1  2006       A     22
          car1  2006       B     36
          car1  2012       A     45
          car1  2006       C     12
          car2  2012       A     45
          car2  2012       C     22")
     
    id_carreau <- unique(df1$id_carreau)
    annee <- unique(df1$annee)
    df_cross <- tidyr::crossing(id_carreau, annee)
    df_cross <- as.data.frame(df_cross)
    df_cross
    #>   id_carreau annee
    #> 1       car1  2006
    #> 2       car1  2012
    #> 3       car2  2006
    #> 4       car2  2012
     
    df2 <- reshape2::dcast(df1, id_carreau + annee ~ facteur, value.var = "valeur")
    df2 <- merge(df2, df_cross, by = c("id_carreau", "annee"), all = TRUE)
    df2
    #>   id_carreau annee  A  B  C
    #> 1       car1  2006 22 36 12
    #> 2       car1  2012 45 NA NA
    #> 3       car2  2006 NA NA NA
    #> 4       car2  2012 45 NA 22
     
    df3 <- reshape2::melt(df2,
                          id.vars = c("id_carreau", "annee"),
                          mesure.vars = c("A":"C"),
                          variable.name = "facteur",
                          value.name = "valeur")
    df3 <- df3[order(df3$id_carreau, df3$annee, df3$facteur),]
    row.names(df3) <- 1:nrow(df3)
    df3
    #>    id_carreau annee facteur valeur
    #> 1        car1  2006       A     22
    #> 2        car1  2006       B     36
    #> 3        car1  2006       C     12
    #> 4        car1  2012       A     45
    #> 5        car1  2012       B     NA
    #> 6        car1  2012       C     NA
    #> 7        car2  2006       A     NA
    #> 8        car2  2006       B     NA
    #> 9        car2  2006       C     NA
    #> 10       car2  2012       A     45
    #> 11       car2  2012       B     NA
    #> 12       car2  2012       C     22
     
    # Created on 2020-11-21 by the reprex package (v0.3.0)
    Cordialement,

  3. #3
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2018
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2018
    Messages : 180
    Points : 54
    Points
    54
    Par défaut
    Bonjour, un grand merci pour votre réponse qui répond complètement mon problème

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

Discussions similaires

  1. Modifier les champs d'une colonne entiere
    Par Cannot dans le forum Requêtes
    Réponses: 3
    Dernier message: 07/08/2015, 13h11
  2. [11gR2] Modifier les champs d'une colonne en gardant leur valeur
    Par floju dans le forum Oracle
    Réponses: 2
    Dernier message: 09/12/2014, 22h54
  3. Réponses: 1
    Dernier message: 15/01/2014, 17h16
  4. Réponses: 6
    Dernier message: 14/09/2012, 20h29
  5. [XL-2003] Filtre selon les modalités d'une colonne
    Par doncamelo dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/11/2009, 00h18

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