2012-12-26 25 views
2

我有一个名为'股票'的股票数据集。每一列都是不同的股票。每一行都是股票价格的日期。数据集行中的排名值

我该如何对给定日期的股票价格进行排名?

我试图

tiedrank(stocks.yhoo) 

并成功位列YHOO股票的价格。不过,我想逐行排列,而不是列。

另外,当我试图

tiedrank(stocks(1,:)) 

或在第1列

tiedrank(stocks(1,2:3)) 

我得到的错误消息删除的日期栏:数据集的数组下标必须是二维的。

我做错了什么?或者我最好使用矩阵?

+0

看来,你的股票数据集类结构的。如果您需要阅读如何从结构数组中提取数据,将对您有所帮助:http://www.mathworks.com/help/matlab/matlab_prog/access-data-in-a-structure-array.html或投射到一个单元阵列,并从那里... – bla

+0

@natan:它似乎不是一个结构,但[数据集](http://www.mathworks.com/help/stats/dataset.html)数组。 – Jonas

+0

@Jonas,对不起,你是对的......我认为只有结构体与var1.field格式一起使用。数据集何时发生? – bla

回答

1

如果我理解正确,您希望根据给定日期的价格对日期进行排名,日期是行,并且股票是列。为了在一行中使用tiedrank,您需要将数据集的一部分转换为double,然后使用输出索引列表进行排序:

%# create index for sorting 
idx = tiedrank(double(stocks(1,:))); 

%# reorder columns with index 
sortedStocks = stocks(:,idx); 
+0

工作,谢谢! Matlab涉及更多类型的投射比我预期的。 – Castielle

+0

演员阵容是从数据集转换到“标准”阵列。不客气,顺便说一句。 – Jonas