开发者

Ordering Table A based on Rank of Table B in R

开发者 https://www.devze.com 2023-03-05 10:58 出处:网络
pretty newb question here, but I have not been able to track down a solution for some time: I have an XTS object of trading indicators (indicate) for stock data that looks like

pretty newb question here, but I have not been able to track down a solution for some time:

I have an XTS object of trading indicators (indicate) for stock data that looks like

               A           XOM          MSFT
2000-11-30   -0.59        0.22          0.10
2000-12-29    0.55       -0.23          0.05
2001-01-30   -0.52        0.09         -0.10

And a table with an identical index for the corresponding period returns (return) that looks like

               A           XOM          MSFT
2000-11-30   -0.15        0.10          0.03
2000-12-29    0.03       -0.05          0.02
2001-01-30   -0.04        0.02  开发者_如何学运维       -0.05

I have sorted the indicator table and had it return the column name with the following code:

indicate.label <- colnames(indicate)
indicate.rank <- t(apply(indicate, 1, function(x) indicate.label[order(-x)]))    
indicate.rank <- xts(indicate.rank, order.by = index(returns))

Which gives the table (indicate.rank) of the symbol names ranked by their trading indicator:

               1            2            3
2000-11-30    XOM         MSFT           A
2000-12-29     A          MSFT          XOM
2001-01-30    XOM          A            MSFT

I would like to also have a table that gives the period returns based on the indicator rank:

2000-11-30    0.10         0.03         -0.15
2000-12-29    0.03         0.02         -0.05
2001-01-30    0.02        -0.04         -0.05

I cannot figure out how to call the correct symbol for all rows or just sort the table return based on the order of indicate.

Thank you for any suggestions.

Trevor J


I'm not particularly satisfied with this solution, but it works.

row.rank <- t(apply(indicate, 1, order, decreasing=TRUE))
indicate.rank <- return.rank <- indicate  # pre-allocate
for(i in 1:NROW(indicate.rank)) {
  indicate.rank[i,] <- colnames(indicate)[row.rank[i,]]
  return.rank[i,] <- return[i,row.rank[i,]]
}

It would probably be easier to handle this if the returns and the indicators for each symbol were in the same object, but I don't know how that would fit with the rest of your workflow.

0

精彩评论

暂无评论...
验证码 换一张
取 消