2011-05-11 53 views
2

漂亮福利局的问题在这里,但我一直无法追查了一段时间的解决方案:订购表A根据表B的排名

我的交易指标的XTS对象(表示 ),用于库存数据看起来像

   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 

并与用于相应的时段的回报,看起来像

   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 
相同的索引( 返回)的表

我已经整理了指标表,把它用下面的代码返回列名:

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)) 

这给表(indicate.rank)的符号名通过交易指标排名:

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

我想也有一个表,给出了基于该指标均居期收益:

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 

我不知道如何调用所有行的正确符号,或者只是根据的顺序返回排序表

谢谢你的任何建议。

特雷弗Ĵ

+1

为了便于测试,如果您在前两个xts对象上提供了输出的输出会更好。 – 2011-05-11 01:15:07

+0

感谢您的回复。我在这里使用了大约2500个符号,所以我给出了数据看起来像什么的缩写表示。我很乐意发布输出,但它的大约7.5MB。有没有办法将文件附加到帖子? – moonvest 2011-05-12 07:13:53

回答

1

我不是特别满意,这个解决方案,但它的工作原理。

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,]] 
} 

它可能会更容易来处理这个如果回报和每个符号的指标均在同一个对象,但我不知道怎么会符合您的工作流程的其余部分。

+0

Josh, 感谢您的帮助。我同意如果数据分组更好,可能会有更优雅的解决方案。一开始我试图做到这一点,但没有一个麻烦的循环找不到方法。但我是R新手,所以我会再看一次。 – moonvest 2011-05-12 07:12:05

相关问题