Split-Apply-Combine
Ein häufiges Problem in der Data Science ist es, einen Data Frame nach einer Gruppierung zu teilen, auf jede Gruppe eine Transformation anzuwenden und die Teile anschließend wieder zu einem Data Frame zusammenzuführen. Diese Problemklasse ist in R so verbreitet, dass sie den Namen split-apply-combine bekommen hat. In Intermediate R for Finance lernst du mehrere dieser Probleme und passende Funktionen kennen. Für jetzt machen wir ein einfaches Beispiel.
Angenommen, du möchtest im cash-Data-Frame den cash_flow für Unternehmen A verdoppeln und für Unternehmen B verdreifachen:
grouping <- cash$company
split_cash <- split(cash, grouping)
# Wir können die cash_flow-Spalte jedes Listenelements so ansprechen:
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)
Schau dir noch einmal an, wie du auf die Spalte cash_flow zugreifst. Das erste $ greift auf das Element A der Liste split_cash zu. Das zweite $ greift auf die Spalte cash_flow des Data Frames in A zu.
Diese Übung ist Teil des Kurses
Einführung in R für Finance
Anleitung zur Übung
- Der Data Frame
split_cashsteht dir zur Verfügung. Außerdem ist dasgrouping, mit demcashgesplittet wurde, verfügbar. - Gib
split_cashaus, um dir die Liste anzusehen. - Gib die Spalte
cash_flowfür UnternehmenBinsplit_cashaus. - Leider hast du erfahren, dass Unternehmen A insolvent ist. Setze den
cash_flowfür Unternehmen A auf0. - Verwende
grouping, um den Data Framesplit_cashmitunsplit()wieder zusammenzusetzen. Weise das Ergebniscash_no_Azu. - Gib zum Schluss
cash_no_Aaus, um den veränderten Data Frame zu sehen.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# 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