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 :

Somme avec cellule précédente


Sujet :

R

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2014
    Messages : 59
    Points : 60
    Points
    60
    Par défaut Somme avec cellule précédente
    Bonjour,

    Voici mon problème. J'ai un data frame avec une colonne représentant des températures data$Temp .

    J'ai crée une deuxième colonne où je veux mettre les températures base 10°C data$sommT. Donc comme calcul je veux faire:

    (Température -10)+ case précédente de sommT

    Et ceci sur toute la colonne.

    Quelqu'un a une idée ?

    Merci

  2. #2
    Membre actif
    Profil pro
    Loisir
    Inscrit en
    Novembre 2011
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Loisir

    Informations forums :
    Inscription : Novembre 2011
    Messages : 159
    Points : 284
    Points
    284
    Par défaut
    Bonjour,

    je n'ai pas vraiment compris ta demande car tu utilises des noms différents pour tes colonnes de dataframe dans ta question (Température =? data$Temp) et tu ne dit pas si data$sommT est une somme cumulée ou les température -10.

    Voici la solution qui me semble la plus logique (il est sans mieux) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    vector1 <- c(1,2,3,4,5,6,7,8,9)
    datafr <- data.frame('init' = vector1)
    # somme cumulée des températures initiales
    datafr$cumsum <- cumsum(datafr$init)
    # températures initiale moins 10°C
    datafr$min10 <- vector1-10
    # somme cumulée précédente
    datafr$prev <- c(0, datafr$cumsum[1:length(datafr$cumsum)-1])
    # calcul final
    datafr$final <- datafr$min10 - datafr$prev
    datafr

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2014
    Messages : 59
    Points : 60
    Points
    60
    Par défaut
    Bonjour,

    Merci pour la réponse.

    En fait, j'ai plusieurs problèmes en 1, j'ai jamais fait ce genre de calcul avec R.

    Voici un premier problème:
    le calcul avec une base, par exemple pour des températures avec une base 10°C.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vector1 <- c(9,10,11,12,13,14,15)
    Le résultat devrait être ceci : (0,0,1,3,6,10,15). Si la températures est inférieure ou égale à 10 alors on a 0, si elle est supérieure à 10 alors la température base 10 sera égale à (température -10) + somme de température précédente .

    Je me demande si c'est possible de faire ceci en R avec une seule ligne de code, sans condition if ?

    Cumsum a l'air adapté sauf pour cette "condition", je n'ai pas réussi à l'adapter pour cet usage.

    Quelqu'un a une idée ?

  4. #4
    Membre actif
    Profil pro
    Loisir
    Inscrit en
    Novembre 2011
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Loisir

    Informations forums :
    Inscription : Novembre 2011
    Messages : 159
    Points : 284
    Points
    284
    Par défaut
    Cumsum est parfaitement adapté, il faut juste lui donner la bonne donnée en entrée.

    Avec ton exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vector4 <- cumsum(pmax(0, vector1-10))
    Avant de tout vouloir faire en une ligne, essaie étape par étape. Pose ton algorithme puis tente d'améliorer ensuite si tu veux faire plus concis.
    Personnellement je préfère cette version :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    vector.base10 <- pmax(0, vector1-10)
    vector3 <- cumsum(vector.base10)

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2014
    Messages : 59
    Points : 60
    Points
    60
    Par défaut
    Merci beaucoup pour cette réponse. Je connaissait pas du tout la commande pmax.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/05/2016, 14h31
  2. Fonction somme avec cellules variables
    Par juxci dans le forum Excel
    Réponses: 5
    Dernier message: 11/02/2015, 17h16
  3. [XL-2007] Ecriture somme avec cellule variable
    Par toushusss dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/06/2011, 12h22
  4. fusion de cellules vides avec cellule précédente pleine
    Par camzo dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 03/10/2007, 17h28
  5. somme de cellule avec une condition
    Par fullcircle dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/06/2006, 08h17

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