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 :

Fonction operation sur data frame et colonnes


Sujet :

R

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Décembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2015
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Fonction operation sur data frame et colonnes
    Bonjour à tous,

    J'ai un nombre conséquent d'opérations à faire sur plusieurs data.frames et plusieurs colonnes de ces dataframes. Je voudrais créer une fonction qui me donne le même résultat que le suivant (exemple en utilisant le jeu de données "mtcars") :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with(mtcars,sum(mpg*disp)/sum(disp))
    voici ce que j'ai essayé (sans succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    moy <- function (df,a,b) { 
                                        a <- df$a
                                        b <- df$b
                                        with(df,sum(a*b)/sum(b))
                                        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    > moy(mtcars,mpg,disp)
    [1] NaN
    si je ne crée pas d'objet pour a et b il me dit qu'il ne trouve pas l'objet correspondant à l'argument. Y a-t-il une méthode?

    Merci beaucoup!!

  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 : 35
    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
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    Le problème ici est lié au type des éléments passés en arguments de la fonction et leur utilisation ensuite : il y a une différence entre le nom d'une variable (exemple : nom d'une colonne) et son contenu. Pour palier à ce genre de problème, il est possible d'avoir recours aux fonctions du type "eval" and co par exemple.

    Sinon, une autre manière d'écrire votre fonction qui fait l'affaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    moy <- function (df,a,b) { 
      a <- df[, a]
      b <- df[, b]
      sum(a*b)/sum(b)
    }
     
    moy(mtcars, "mpg", "disp")  # attention ici les guillemets autour des noms de colonnes sont indispensables !
    # [1] 17.43239
    N'hésitez pas à poser des questions si vous souhaitez plus de précisions !


    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
    Futur Membre du Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Décembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2015
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Bonjour A.D.,

    Cela fonctionne à merveille! Merci beaucoup.

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

Discussions similaires

  1. [DATA] Fonction ALLCOMB sur DATA
    Par Actutruc dans le forum SAS Base
    Réponses: 2
    Dernier message: 22/02/2016, 09h20
  2. [AC-2007] Fonction EVAL sur contrôle lié à une colonne type money
    Par Piou2fois dans le forum Projets ADP
    Réponses: 2
    Dernier message: 05/12/2014, 12h38
  3. travail complexe sur data frame
    Par Marwai dans le forum R
    Réponses: 2
    Dernier message: 17/07/2014, 15h31
  4. apply sur data.frame
    Par jane40 dans le forum R
    Réponses: 3
    Dernier message: 07/01/2013, 12h09
  5. fonction 'si' sur 2 colonnes
    Par kikinou91 dans le forum Excel
    Réponses: 4
    Dernier message: 16/07/2007, 16h37

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