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 :

Transformation de variables


Sujet :

R

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Février 2013
    Messages : 27
    Par défaut Transformation de variables
    Bonjour,

    J'ai un tableau qui est sous la forme suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    d2404	d2904	d0505
    12	12	12
    5	5	5
    8	8	8
    NA	10	10
    NA	NA	2
    Et je voudrais obtenir celui la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dose	date
    12	2404
    5	2404
    8	2404
    10	2904
    2	0505
    Afin d'avoir, pour chaque ligne, la date à laquelle la dose a été indiquée en premier.

    Mais je n'ai pas la moindre idée de comment faire.

    Si quelqu'un a une idée ça m'aiderait beaucoup, je suis bloquée.

    Merci par avance,

    Virginie

  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 : 37
    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
    Par défaut
    Bonjour,

    Une solution possible (mais il y a peut-être plus optimisé ^^) :

    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
     
    # Création de la première matrice de données
     
    A <- data.frame(d2404 = c(12, 5, 8, NA, NA), d2904 = c(12, 5, 8, 10, NA), d0505 = c(12, 5, 8, 10, 2)) 
     
     
    # Test sur la date de première apparition
     
    test_premiere_apparition <- function(v)
    {
        w <- as.numeric(v)
        test <- (!(duplicated(w))) * (!(is.na(w)))  # va renvoyer 1 dans le cas où la valeur rencontrée apparait pour la 1ère fois et qu'il ne s'agit pas de "NA"
        out <- which(test == 1)
     
        return(out)
    }
     
    S <- apply(A, 1, test_premiere_apparition)  # Pour chaque ligne de A, S va contenir le numéro de la colonne de A dans laquelle on trouve cette valeur pour la 1ère fois
     
     
    # Création de la matrice de sortie
     
    B <- rep(0, dim(A)[1]*2)
    dim(B) <- c(dim(A)[1], 2)
     
    names <- gsub("d", "", colnames(A))  # récupération des dates dans les en-têtes de colonnes de A en supprimant le préfixe "d"
     
    for(k in 1:(dim(B)[1]))
    {
      B[k, 1] <- A[k, S[k]]
      B[k, 2] <- names[S[k]]
    }
     
    B <- as.data.frame(B)
    colnames(B) <- c("dose", "date")
     
    B
    #   dose date
    #    12 2404
    #     5 2404
    #     8 2404
    #    10 2904
    #     2 0505

    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
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Février 2013
    Messages : 27
    Par défaut
    Wouah

    Ce n'est pas simple...

    Merci beaucoup en tout cas !

    Virginie

  4. #4
    Membre expérimenté
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Octobre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Bioinformaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 126
    Par défaut
    Bonjour,
    En complément de la réponse de A.D. : les données semblent indiquer qu'une même dose peut-être administrée à plusieurs dates différentes. Ma proposition est donc de lister toutes ces dates.
    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
    xxx <- read.table(text = "d2404	d2904	d0505
    12	12	12
    5	5	5
    8	8	8
    NA	10	10
    NA	NA	2", header = TRUE, sep = "\t")
     
    # envExt est là pour réserver un espace où des variables « globales » pourront être déclarées
    # sans affecter les objets se trouvant dans d'autres endroits (environnements « simples », espaces des noms, etc.).
    envExt <- new.env(parent = emptyenv())
    envExt$cpt <- 0L
    envExt$sortie <- vector("list", length(xxx))
    envExt$composants <- colnames(xxx)
    names(envExt$sortie) <- envExt$composants
     
    # Dans chaque colonne de xxx, associer chaque élément à l'étiquette de la colonne, i.e.
    # associer de façon unique les doses à leurs dates d'applications.
    lapply(xxx, function(yyy) {
        envExt$cpt <- envExt$cpt + 1L
        buff <- unique(na.exclude(yyy))
        envExt$sortie[[envExt$cpt]] <- lapply(buff, function(x) envExt$composants[envExt$cpt])
        names(envExt$sortie[[envExt$cpt]]) <- as.character(buff)
    })
     
    str(envExt$sortie)
     
    # Rassembler les résultats : les doses sont en colonnes avec un préfixe « X » qu'on
    # pourra aisément éliminer si de besoin.
    library("plyr")
    resultat <- rbind.fill(
        as.data.frame(envExt$sortie$d2404),
        as.data.frame(envExt$sortie$d2904),
        as.data.frame(envExt$sortie$d0505)
    )
     
    print(resultat)
    > print(resultat)
        X12    X5    X8   X10    X2
    1 d2404 d2404 d2404  <NA>  <NA>
    2 d2904 d2904 d2904 d2904  <NA>
    3 d0505 d0505 d0505 d0505 d0505
    Addendum.
    dplyr étant la version améliorée de plyr, la même chose avec dplyr donc mais avec des avertissements :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    library("dplyr")
    resultatBis <- bind_rows(
        as.data.frame(envExt$sortie$d2404),
        as.data.frame(envExt$sortie$d2904),
        as.data.frame(envExt$sortie$d0505)
    )
     
    print(resultatBis)
    Source: local data frame [3 x 5]
    
        X12    X5    X8   X10     X2
      (chr) (chr) (chr) (chr) (fctr)
    1 d2404 d2404 d2404    NA     NA
    2 d2904 d2904 d2904 d2904     NA
    3 d0505 d0505 d0505 d0505  d0505

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

Discussions similaires

  1. Transformation de variables $_GET et $_POST
    Par Sayrus dans le forum Langage
    Réponses: 3
    Dernier message: 21/02/2008, 22h23
  2. ne pas transformer \ en \\ ? & variables hexa-ascii
    Par vincentweb dans le forum Général Python
    Réponses: 8
    Dernier message: 21/07/2006, 22h35
  3. Comment transformer une variable en fichier
    Par TuRn3r dans le forum C++
    Réponses: 4
    Dernier message: 21/04/2006, 14h25
  4. Réponses: 3
    Dernier message: 23/02/2006, 09h37
  5. [DEBUTANT] Transformer une variable Double en STring
    Par Battosaiii dans le forum Langage
    Réponses: 6
    Dernier message: 13/06/2005, 16h43

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