Diviser-Appliquer-Combiner
Un problème courant en data science consiste à diviser un data frame selon un regroupement, appliquer une transformation à chaque groupe, puis recombiner le tout en un seul data frame. Cette famille de problèmes est si fréquente en R qu’elle a été baptisée split-apply-combine. Dans Intermediate R for Finance, vous explorerez plusieurs de ces problèmes et des fonctions utiles pour les résoudre, mais pour l’instant, voyons un exemple simple.
Supposons que, pour le data frame cash, vous vouliez doubler cash_flow pour l’entreprise A et le tripler pour l’entreprise B :
grouping <- cash$company
split_cash <- split(cash, grouping)
# Nous pouvons accéder à la colonne cash_flow de chaque élément de la liste via :
split_cash$A$cash_flow
[1] 1000 4000 550
split_cash$A$cash_flow <- split_cash$A$cash_flow * 2
split_cash$B$cash_flow <- split_cash$B$cash_flow * 3
new_cash <- unsplit(split_cash, grouping)
Regardez à nouveau comment vous accédez à la colonne cash_flow. Le premier $ permet d’accéder à l’élément A de la liste split_cash. Le deuxième $ permet d’accéder à la colonne cash_flow du data frame contenu dans A.
Cet exercice fait partie du cours
Introduction à R pour la finance
Instructions
- Le data frame
split_cashest à votre disposition. Legroupingutilisé pour scindercashest aussi disponible. - Affichez
split_cashpour examiner la liste. - Affichez la colonne
cash_flowde l’entrepriseBdanssplit_cash. - Mauvaise nouvelle : vous avez appris que l’entreprise A a fait faillite. Fixez
cash_flowde l’entreprise A à0. - Utilisez
groupingavecunsplit()pour recomposer le data framesplit_cash. Assignez le résultat àcash_no_A. - Enfin, affichez
cash_no_Apour voir le data frame modifié.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# Print split_cash
# Print the cash_flow column of B in split_cash
split_cash$___$___
# Set the cash_flow column of company A in split_cash to 0
split_cash$___$___ <- ___
# Use the grouping to unsplit split_cash
cash_no_A <- unsplit(___, ___)
# Print cash_no_A