Addition colonne

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Ilias Dahmani
Messages : 4
Enregistré le : 21 Mai 2021, 13:50

Addition colonne

Messagepar Ilias Dahmani » 08 Juil 2021, 09:46

Bonjour à tous,

Je rencontre un problème et même en épluchant bien le forum je ne pense pas avoir trouver quelqu'un rencontrant le même problème que moi. J'ai un jeu de données comportant 3 lignes et 5 colonnes et j'aimerai additionner les valeurs des colonnes 2 à 5 en fonction de la colonne précédente.

Je ne sais pas comment vous montrer mon tableau. Grosso modo. La première colonne est la colonne des pays et donc nous avons pour les lignes 1/2/3 de cette colonne 1 nos 3 pays. Les colonnes 2 à 5 représentent des dates ( de 2016 à 2019 par exemple) et donc les lignes 1/2/3 de ces colonnes représentent le nombre de patients inclus par pays pour chaque année.

Ce que je veux, c'est que par exemple la colonne 3 n'ait pas comme valeur uniquement les patients inclus pour l'année 2017 du coup mais ceux de 2017 et 2016.
Une méthode manuelle de le faire est Table_Country[,3]<-Table_Country[,2]+Table_Country[,3]

Je peux faire de même pour la colonne 4 et l'année 2018 : Table_Country[,4]<-Table_Country[,3]+Table_Country[,4]

Mais le problème est que la méthode n'est pas automatique. J'ai essayé la fonction apply, ou encore rowsums mais ça ne marche pas. Je ne les ai peut-être pas bien utilisé. Je veux que ce soit automatique car mon tableau est amené à évoluer et dans 6 mois j'aurai plus de colonnes. La seule chose que je sais et que je commencerais toujours à partir de la colonne 3. En gros la colonne 2 est la première date qui garde sa valeur prore, la colonne 3 prend la valeur de la colonne 3 + la valeur de la colonne 2 etç.

J'espère avoir été clair.

Merci pour votre aide.

Michaël Delorme
Messages : 67
Enregistré le : 04 Avr 2016, 10:21

Re: Addition colonne

Messagepar Michaël Delorme » 08 Juil 2021, 14:22

Il y a sûrement plus court avec R base et sans passer par les pivots, mais bon...

Code : Tout sélectionner

library(tidyverse)
df <- tribble(~pays, ~`2010`, ~`2011`, ~`2012`,
              "FRA", 10, 10, 10,
              "CHE", 10, 20, 30,
              "ITA", 100, 0, NA)

df %>%
  pivot_longer(-1, names_to = "annee", values_to = "n") %>%
  group_by(pays) %>%
  mutate(n = cumsum(n)) %>%
  ungroup() %>%
  pivot_wider(names_from = annee, values_from = n)

Code : Tout sélectionner

# A tibble: 3 x 4
  pays  `2010` `2011` `2012`
  <chr>  <dbl>  <dbl>  <dbl>
1 FRA       10     20     30
2 CHE       10     30     60
3 ITA      100    100     NA

Ilias Dahmani
Messages : 4
Enregistré le : 21 Mai 2021, 13:50

Re: Addition colonne

Messagepar Ilias Dahmani » 08 Juil 2021, 14:46

Merci beaucoup pour cette réponse !

Je n'ai pas mon jeu de données sous les yeux mais je teste cela dès demain ! Je vous tiens ensuite au jus

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Addition colonne

Messagepar Logez Maxime » 09 Juil 2021, 08:54

Bonjour,

avec les fonctions de base :

Code : Tout sélectionner

cbind(df[,1], t(apply(df[-1], 1, cumsum)))

Cordialement,
Maxime

Ilias Dahmani
Messages : 4
Enregistré le : 21 Mai 2021, 13:50

Re: Addition colonne

Messagepar Ilias Dahmani » 12 Juil 2021, 08:29

Logez Maxime a écrit :Bonjour,

avec les fonctions de base :

Code : Tout sélectionner

cbind(df[,1], t(apply(df[-1], 1, cumsum)))

Cordialement,
Maxime


Merci à vous deux !

J'ai réussi avec cette fonction du coup ! c'est exactement ce que je voulais faire


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité