为data.table新增列:计算个股预测前5天与组合收益的相关性
解决方案:计算个股预测收益与投资组合收益的相关性
没问题,我来帮你搞定这个需求!咱们用data.table的高效语法就能轻松实现,具体步骤如下:
1. 提取投资组合的日收益向量
首先,我们需要从portfolio_profit_daily中把前5天的收益数据提取成一个数值向量,方便后续计算相关性:
set.seed(1) portfolio_profit_daily <- data.table(`Stat`="Profit","2019-01-01"=rnorm(1), "2019-01-02"=rnorm(1), "2019-01-03"=rnorm(1), "2019-01-04"=rnorm(1), "2019-01-05"=rnorm(1)) asset_forecasted_daily <- data.table(`Asset`=c("A1","A2","A3","A4"),"2019-01-01"=rnorm(4), "2019-01-02"=rnorm(4), "2019-01-03"=rnorm(4), "2019-01-04"=rnorm(4), "2019-01-05"=rnorm(4), "2019-01-06"=rnorm(4),"2019-01-07"=rnorm(4),"2019-01-08"=rnorm(4),"2019-01-09"=rnorm(4),"2019-01-10"=rnorm(4)) # 提取投资组合的5天收益向量(去掉Stat列) port_profit_vec <- as.numeric(portfolio_profit_daily[, -"Stat"])
2. 新增相关性列到个股预测数据
接下来,我们用data.table的.SD(Subset of Data)特性,对每只个股的前5天预测收益,计算其与投资组合收益的相关性,并把结果作为新列加入asset_forecasted_daily:
方式一:指定具体日期列(硬编码)
如果日期固定,可以直接写出前5天的列名:
asset_forecasted_daily[, corr_with_portfolio := apply(.SD, 1, function(row_vals) { cor(row_vals, port_profit_vec) }), .SDcols = c("2019-01-01", "2019-01-02", "2019-01-03", "2019-01-04", "2019-01-05")]
方式二:自动匹配日期列(更灵活)
如果后续日期有变化,我们可以自动提取前5个日期列(跳过第一列的Asset):
# 自动获取前5个日期列名 date_cols <- colnames(asset_forecasted_daily)[2:6] # 新增相关性列 asset_forecasted_daily[, corr_with_portfolio := apply(.SD, 1, function(row_vals) { cor(row_vals, port_profit_vec) }), .SDcols = date_cols]
3. 查看结果
运行完上述代码后,你可以打印asset_forecasted_daily,就能看到新增的corr_with_portfolio列,里面就是每只个股前5天预测收益和投资组合收益的相关系数:
print(asset_forecasted_daily)
关键说明
apply(.SD, 1, ...):对.SD指定的列(前5天日期列)逐行应用相关性计算函数;:=:data.table中用于新增或修改列的高效操作符,避免复制整个数据集;- 因为我们设置了
set.seed(1),所以运行结果是完全可复现的。
内容的提问来源于stack exchange,提问作者FG7




