Kom igångKom igång gratis

Split-Apply-Combine

Ett vanligt problem inom datavetenskap är att dela upp en dataram efter en gruppering, tillämpa någon transformation på varje grupp och sedan sätta ihop delarna igen till en enda dataram. Det här är en så pass vanlig typ av problem i R att det fått ett eget namn: split-apply-combine. I Intermediate R for Finance utforskar du ett antal sådana problem och funktioner som är användbara för att lösa dem – men låt oss börja med ett enkelt exempel.

Anta att du för dataramen cash vill dubblera cash_flow för företag A och tredubbla den för företag B:

grouping <- cash$company
split_cash <- split(cash, grouping)

# We can access each list element's cash_flow column by:
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)

Lägg märke till hur du kommer åt kolumnen cash_flow. Det första $ används för att komma åt elementet A i listan split_cash. Det andra $ används för att komma åt kolumnen cash_flow i dataramen som finns i A.

Den här övningen är en del av kursen

Introduktion till R för finans

Visa kurs

Övningsinstruktioner

  • Dataramen split_cash finns tillgänglig. Det gör också den grouping som användes för att dela upp cash.
  • Skriv ut split_cash för att få en överblick över listan.
  • Skriv ut kolumnen cash_flow för företag B i split_cash.
  • Tyvärr har du fått veta att företag A har gått i konkurs. Sätt cash_flow för företag A till 0.
  • Använd grouping för att anropa unsplit() på dataramen split_cash. Tilldela resultatet till cash_no_A.
  • Skriv slutligen ut cash_no_A för att se den uppdaterade dataramen.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

# 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
Redigera och kör kod