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 :

Effectuer une mise à l'échelle


Sujet :

R

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Effectuer une mise à l'échelle
    Bonjour !

    J'ai une data.frame de deux colonnes. La première (que nous appellerons A) contient des noms de compteurs (N). Chaque nom de compteur peut être présent plusieurs fois dans la data.frame. La deuxième colonne (B) contient des valeurs numériques (V).

    J'aimerai rajouter une colonne (C) qui contient, pour chaque ligne, la valeur V divisée par le maximum des V rencontré dans B pour l'étiquette N. Afin que chacune des valeurs V soit mise à l'echelle (0 à 1) selon le maximum de sa catégorie (N).

    Autrement dit :

    A B
    x 1
    y 2
    z 3
    x 2
    z 6

    donne :

    A B C
    x 1 0.5
    y 2 1
    z 3 0.5
    x 2 1
    z 6 1

    /EDIT/ Je sais faire cette manœuvre en la programmant en perl, je sais que je pourrai le faire en la programmant en R, je souhaite plutôt une solution qui tire profit des particularités de R. Merci !

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    J'ai trouvé ça pour l'instant (rajout d'une colonne max (D) et d'une colonne ratio (C dans l'exemple précédent) avec suppression des NaN si max vaut 0) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    AddMaxAndScaleColumn <-
    function (df) {
       maxbycounter <- sapply(unique(df[,"A"]),
       function(compteur) {
          max(df[df[,"A"]==compteur,"B"])
       }) ;
       df[,"D"] <- maxbycounter[df[,"A"]] ;
       df[,"C"] <- df[,"B"]/df[,"D"] ;
       df[(df[,"D"]==0),"C"] <- 0 ;
       df
    }

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 7
    Points : 9
    Points
    9
    Par défaut Une solution
    Les données sont placées dans un tableau "data", auquel on ajoute successivement deux colonnes "max" et "C" en écrivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #colonne des max
    data<-cbind(data,max=(tapply(data$B,factor(data$A), max))[data$A])
    #colonne des ratios
    data<-cbind(data,C=data$B/data$max)
    Le tableau data est alors :
    A B max C
    x 1 2 0.5
    y 2 2 1.0
    z 3 6 0.5
    x 2 2 1.0
    z 6 6 1.0

    Le résultat est data$C

Discussions similaires

  1. Microsoft effectue une mise à jour de Windows Store
    Par Stéphane le calme dans le forum Actualités
    Réponses: 5
    Dernier message: 14/05/2014, 14h18
  2. Effectuer la mise a jour d une table a vb6
    Par sooprano dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/03/2008, 13h51
  3. Réponses: 4
    Dernier message: 11/07/2007, 16h23
  4. Réponses: 5
    Dernier message: 10/05/2007, 13h31
  5. [C#][ MSI] Comment effectuer une mise à jour d'application ?
    Par th3r1ddl3r dans le forum Windows Forms
    Réponses: 6
    Dernier message: 15/12/2005, 10h09

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