从 data.table 中的每个组中减去一个向量并按日期匹配
Subtract a vector from each group in a data.table and match by dates in both
假设我有一个这样的data.table:
print(priceDT)
Date Return Stock
1: 2011-01-03 0.0800 AFR
2: 2011-01-04 0.0300 AFR
3: 2011-01-05 -0.0125 AFR
4: 2011-01-06 0.0100 AFR
5: 2011-01-07 0.0020 AFR
6: 2011-01-10 0.0073 BMF
7: 2011-01-11 -0.0150 BMF
8: 2011-01-12 0.0130 BMF
9: 2011-01-13 -0.0080 BMF
10: 2011-01-14 0.0410 BMF
11: 2011-01-17 -0.0065 BMF
12: 2011-01-18 0.0180 BMF
13: 2011-01-19 0.0017 BMF
14: 2011-01-20 0.0262 BMF
15: 2011-01-21 -0.0190 BMF
我想从 priceDT data.table 的 returns 列中减去市场向量 returns。市场 returns 在另一个 data.table 中,包含 2011 年前 3 个交易周的日期。但是,priceDT 中的两只股票没有所有交易周的数据。第一只股票 AFR 只有一周的数据。第二只股票有两周的数据。市场 returns 拥有所有三周的数据。
市场returns是这样的:
print(market)
market
Date Return
1: 2011-01-03 0.01112
2: 2011-01-04 0.02800
3: 2011-01-05 0.00580
4: 2011-01-06 0.00400
5: 2011-01-07 0.00910
6: 2011-01-10 0.01300
7: 2011-01-11 -0.00800
8: 2011-01-12 -0.01000
9: 2011-01-13 0.02400
10: 2011-01-14 0.01390
11: 2011-01-17 0.01040
12: 2011-01-18 0.00718
13: 2011-01-19 0.01220
14: 2011-01-20 -0.00620
15: 2011-01-21 0.00944
如何从第一只股票 AFR 的 returns 中减去 1 月第一周的市场 returns 并减去接下来两周的市场 returns 1月来自第二只股票BMF的returns。有没有办法在减去之前按日期匹配两个数据?
结果应该是:
print(result)
Date Return Adjusted Return Stock
1: 2011-01-03 0.0800 0.06888 AFR
2: 2011-01-04 0.0300 0.00200 AFR
3: 2011-01-05 -0.0125 -0.01830 AFR
4: 2011-01-06 0.0100 0.00600 AFR
5: 2011-01-07 0.0020 -0.00710 AFR
6: 2011-01-10 0.0073 -0.00570 BMF
7: 2011-01-11 -0.0150 -0.00700 BMF
8: 2011-01-12 0.0130 0.02300 BMF
9: 2011-01-13 -0.0080 -0.03200 BMF
10: 2011-01-14 0.0410 0.02710 BMF
11: 2011-01-17 -0.0065 -0.01690 BMF
12: 2011-01-18 0.0180 0.01082 BMF
13: 2011-01-19 0.0017 -0.01050 BMF
14: 2011-01-20 0.0262 0.03240 BMF
15: 2011-01-21 -0.0190 -0.02844 BMF
数据:
priceDT <- fread(text = "Date,Return,Stock
2011-01-03,0.08,AFR
2011-01-04,0.03,AFR
2011-01-05,-0.0125,AFR
2011-01-06,0.01,AFR
2011-01-07,0.002,AFR
2011-01-10,0.0073,BMF
2011-01-11,-0.015,BMF
2011-01-12,0.013,BMF
2011-01-13,-0.008,BMF
2011-01-14,0.041,BMF
2011-01-17,-0.0065,BMF
2011-01-18,0.018,BMF
2011-01-19,0.0017,BMF
2011-01-20,0.0262,BMF
2011-01-21,-0.019,BMF
")
market <- fread(text = "Date,Return
2011-01-03,0.01112
2011-01-04,0.028
2011-01-05,0.0058
2011-01-06,0.004
2011-01-07,0.0091
2011-01-10,0.013
2011-01-11,-0.008
2011-01-12,-0.01
2011-01-13,0.024
2011-01-14,0.0139
2011-01-17,0.0104
2011-01-18,0.00718
2011-01-19,0.0122
2011-01-20,-0.0062
2011-01-21,0.00944
")
result <- fread(text = "Date,Return,Adjusted Return,Stock
2011-01-03,0.08,0.06888,AFR
2011-01-04,0.03,0.00200,AFR
2011-01-05,-0.0125,-0.01830,AFR
2011-01-06,0.01,0.00600,AFR
2011-01-07,0.002,-0.00710,AFR
2011-01-10,0.0073,-0.0057,BMF
2011-01-11,-0.015,-0.0070,BMF
2011-01-12,0.013,0.0230,BMF
2011-01-13,-0.008,-0.0320,BMF
2011-01-14,0.041,0.0271,BMF
2011-01-17,-0.0065,-0.0169,BMF
2011-01-18,0.018,0.01082,BMF
2011-01-19,0.0017,-0.0105,BMF
2011-01-20,0.0262,0.03240,BMF
2011-01-21,-0.019,-0.02844,BMF
")
我可能误解了你的要求,但这符合预期的输出
priceDT[, adj_return := market[.SD, on = "Date", i.Return - x.Return]]
假设我有一个这样的data.table:
print(priceDT)
Date Return Stock
1: 2011-01-03 0.0800 AFR
2: 2011-01-04 0.0300 AFR
3: 2011-01-05 -0.0125 AFR
4: 2011-01-06 0.0100 AFR
5: 2011-01-07 0.0020 AFR
6: 2011-01-10 0.0073 BMF
7: 2011-01-11 -0.0150 BMF
8: 2011-01-12 0.0130 BMF
9: 2011-01-13 -0.0080 BMF
10: 2011-01-14 0.0410 BMF
11: 2011-01-17 -0.0065 BMF
12: 2011-01-18 0.0180 BMF
13: 2011-01-19 0.0017 BMF
14: 2011-01-20 0.0262 BMF
15: 2011-01-21 -0.0190 BMF
我想从 priceDT data.table 的 returns 列中减去市场向量 returns。市场 returns 在另一个 data.table 中,包含 2011 年前 3 个交易周的日期。但是,priceDT 中的两只股票没有所有交易周的数据。第一只股票 AFR 只有一周的数据。第二只股票有两周的数据。市场 returns 拥有所有三周的数据。
市场returns是这样的:
print(market)
market
Date Return
1: 2011-01-03 0.01112
2: 2011-01-04 0.02800
3: 2011-01-05 0.00580
4: 2011-01-06 0.00400
5: 2011-01-07 0.00910
6: 2011-01-10 0.01300
7: 2011-01-11 -0.00800
8: 2011-01-12 -0.01000
9: 2011-01-13 0.02400
10: 2011-01-14 0.01390
11: 2011-01-17 0.01040
12: 2011-01-18 0.00718
13: 2011-01-19 0.01220
14: 2011-01-20 -0.00620
15: 2011-01-21 0.00944
如何从第一只股票 AFR 的 returns 中减去 1 月第一周的市场 returns 并减去接下来两周的市场 returns 1月来自第二只股票BMF的returns。有没有办法在减去之前按日期匹配两个数据?
结果应该是:
print(result)
Date Return Adjusted Return Stock
1: 2011-01-03 0.0800 0.06888 AFR
2: 2011-01-04 0.0300 0.00200 AFR
3: 2011-01-05 -0.0125 -0.01830 AFR
4: 2011-01-06 0.0100 0.00600 AFR
5: 2011-01-07 0.0020 -0.00710 AFR
6: 2011-01-10 0.0073 -0.00570 BMF
7: 2011-01-11 -0.0150 -0.00700 BMF
8: 2011-01-12 0.0130 0.02300 BMF
9: 2011-01-13 -0.0080 -0.03200 BMF
10: 2011-01-14 0.0410 0.02710 BMF
11: 2011-01-17 -0.0065 -0.01690 BMF
12: 2011-01-18 0.0180 0.01082 BMF
13: 2011-01-19 0.0017 -0.01050 BMF
14: 2011-01-20 0.0262 0.03240 BMF
15: 2011-01-21 -0.0190 -0.02844 BMF
数据:
priceDT <- fread(text = "Date,Return,Stock
2011-01-03,0.08,AFR
2011-01-04,0.03,AFR
2011-01-05,-0.0125,AFR
2011-01-06,0.01,AFR
2011-01-07,0.002,AFR
2011-01-10,0.0073,BMF
2011-01-11,-0.015,BMF
2011-01-12,0.013,BMF
2011-01-13,-0.008,BMF
2011-01-14,0.041,BMF
2011-01-17,-0.0065,BMF
2011-01-18,0.018,BMF
2011-01-19,0.0017,BMF
2011-01-20,0.0262,BMF
2011-01-21,-0.019,BMF
")
market <- fread(text = "Date,Return
2011-01-03,0.01112
2011-01-04,0.028
2011-01-05,0.0058
2011-01-06,0.004
2011-01-07,0.0091
2011-01-10,0.013
2011-01-11,-0.008
2011-01-12,-0.01
2011-01-13,0.024
2011-01-14,0.0139
2011-01-17,0.0104
2011-01-18,0.00718
2011-01-19,0.0122
2011-01-20,-0.0062
2011-01-21,0.00944
")
result <- fread(text = "Date,Return,Adjusted Return,Stock
2011-01-03,0.08,0.06888,AFR
2011-01-04,0.03,0.00200,AFR
2011-01-05,-0.0125,-0.01830,AFR
2011-01-06,0.01,0.00600,AFR
2011-01-07,0.002,-0.00710,AFR
2011-01-10,0.0073,-0.0057,BMF
2011-01-11,-0.015,-0.0070,BMF
2011-01-12,0.013,0.0230,BMF
2011-01-13,-0.008,-0.0320,BMF
2011-01-14,0.041,0.0271,BMF
2011-01-17,-0.0065,-0.0169,BMF
2011-01-18,0.018,0.01082,BMF
2011-01-19,0.0017,-0.0105,BMF
2011-01-20,0.0262,0.03240,BMF
2011-01-21,-0.019,-0.02844,BMF
")
我可能误解了你的要求,但这符合预期的输出
priceDT[, adj_return := market[.SD, on = "Date", i.Return - x.Return]]