I have a list object as below:
structure(list(bga_u = structure(list(buy_target_price = numeric(0),
sell_target_price = numeric(0), units_holding = 0, tx_record = structure(list(
`2010-12-01` = structure(list(buy_date = structure(14944, class = "Date"),
offer_price = 40.58, buy_unit = 3.15931809278285,
status = "hold"), .Names = c("buy_date", "offer_price",
"buy_unit", "status")), `2011-01-03` = structure(list(
buy_date = structure(14977, class = "Date"), offer_price = 42.2,
buy_unit = 3.03803621339166, status = "hold"), .Names = c("buy_date",
"offer_price", "buy_unit", "status")), `2011-02-01` = structure(list(
buy_date = structure(15006, class = "Date"), offer_price = 42.59,
buy_unit = 3.01021667539629, status = "hold"), .Names = c("buy_date",
"offer_price", "buy_unit", "status")), `2011-03-01` = structure(list(
buy_date = structure(15034, class = "Date"), offer_price = 43.37,
buy_unit = 2.95607858439309, status = "hold"), .Names = c("buy_date",
"offer_price", "buy_unit", "status")), `2011-04-01` = structure(list(
buy_date = structure(15065, class = "Date"), offer_price = 43.35,
buy_unit = 2.95744240380919, status = "hold"), .Names = c("buy_date",
"offer_price", "buy_unit", "status")), `2011-05-03` = structure(list(
buy_date = structure(15097, class = "Date"), offer_price = 44.53,
buy_unit = 2.87907316876551, status = "hold"), .Names = c("buy_date",
"offer_price", "buy_unit", "status"))), .Names = c("2010-12-01",
"2011-01-03", "2011-02-01", "2011-03-01", "2011-04-01", "2011-05-03"
))), .Names = c("buy_target_price", "sell_target_price",
"units_holding", "tx_record")), bwg_u = structure(list(buy_target_price = numeric(0),
sell_target_price = numeric(0), units_holding = 0, tx_record = structure(list(
`2010-11-02` = structure(list(buy_date = structure(14915, class = "Date"),
offer_price = 63.15, buy_unit = 2.03016830095215,
status = "hold"), .Names = c("buy_date", "offer_price",
"buy_unit", "status")), `2010-12-01` = structure(list(
buy_date = structure(14944, class = "Date"), offer_price = 64.19,
buy_unit = 1.99727571592348, status = "hold"), .Names = c("buy_date",
"offer_price", "buy_unit", "status")), `2011-09-01` = structure(list(
buy_date = structure(15218, class = "Date"), offer_price = 69.29,
buy_unit = 1.85026884406304, status = "hold"), .Names = c("buy_date",
"offer_price", "buy_unit", "status")), `2011-10-03` = structure(list(
buy_date = structure(15250, class = "Date"), offer_price = 58.05,
buy_unit = 2.20852934031229, status = "hold"), .Names = c("buy_date",
"offer_price", "buy_unit", "status"))), .Names = c("2010-11-02",
"2010-12-01", "2011-09-01", "2011-10-03"))), .Names = c("buy_target_price",
"sell_target_price", "units_holding", "tx_record"))), .Names = c("bga_u",
"bwg_u"))
This is a “list in a list” object composed of 3 levels:
- level 1: names of all fund (2 funds here:
bga_u andbwg_u) - level 2: target buy price; target sell price; and units holding
- level 3: details of a particular trade (e.g. unit bought)
The “unit holding” stored in level 2 is calculated by summing the “buy unit” in level 3 for each trade, if the status in for that particular trade is still “hold”.
How can I calculate the “unit holding” for each fund and put in level 2?
(I used R for 2-3 years but I am new to the list object, I may be conceptually wrong about list.)
Assuming that whole list is named as
dl, apply function to every first level (fund) of list. First, make data frames of trade records, then sum units and put them inunits_holding.