我正在尝试将按其回报排名的股票表转换为一个值矩阵,该矩阵将PerformanceAnalytics::ReturnPortfolio
作为投资组合中股票的权重输入。
我特别想做的是将 33% 表现最好的股票的排名值转换为 1,将 33% 表现最差的股票的排名值转换为 -1,其余为 0。
这是我只是选取最好的股票并将它们的排名值更改为 1 的原始代码:
asset_ranking <- db_Momentum %>%
dplyr::select(-date) %>%
as.matrix() %>%
rowRanks(ties.method = "min") %>%
as.data.frame() %>%
dplyr::mutate(date = db_Momentum$date) %>%
dplyr::select(date, everything()) %>%
purrr::set_names(c("date", tickets)) %>%
as_tibble()
# Analyzing Sector Selection
asset_selection <- asset_ranking %>%
mutate_if(is.numeric, ~ + ( . > (length(tickets) - n_assets_buy))) %>%
dplyr::select(-date)
这是一个现在的例子:
苹果 | IBM | KO | 吨 | TLT | 间谍 |
---|---|---|---|---|---|
1 | 2 | 3 | 4 | 6 | 5 |
2 | 1 | 3 | 5 | 4 | 6 |
1 | 4 | 2 | 5 | 3 | 6 |
6 | 4 | 5 | 2 | 1 | 3 |
这就是我想要的:
苹果 | IBM | KO | 吨 | TLT | 间谍 |
---|---|---|---|---|---|
1 | 1 | 0 | 0 | -1 | -1 |
1 | 1 | 0 | -1 | 0 | -1 |
1 | 0 | 1 | -1 | 0 | -1 |
-1 | 0 | -1 | 1 | 1 | 0 |