Reshape Cell to Matrix
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
I'm receiving a very large quantity of data in a table like format with only 3 columns (Ticker, Return, Date). What I end up with are thousands of instances of the same date and ticker which becomes very inefficient for Matlab to utilize in calculations. I'd like a matrix with Tickers across the columns and dates down the rows. The trick is that not all tickers have a Return for every date so I can't just reshape the matrix based on a unique count of tickers and dates. Does anyone have any idea how to go about doing this? Here's an example of what I'm looking for.
Initial Format
IBM,1.01,1
IBM,1.04,2
IBM,1.06,3
GOOG,.99,1
GOOG,.98,2
AAPL,1,1
AAPL,1.1,2
AAPL,.99,3
Matrix Format below. Where Dates and Tickers would likely be separate arrays. This example should copy to Excel and make it more clear
,AAPL,GOOG,IBM
1,1,99,1.01
2,1.1,.98,1.04
3,.99,Nan,1.06
0 Commenti
Risposta accettata
Andrei Bobrov
il 22 Dic 2011
EDIT [13:20MSK 23.12.2011]
data = {'IBM',1.01,1
'IBM',1.04,2
'IBM',1.06,3
'GOOG',.99,1
'GOOG',.98,2
'AAPL',1,1
'AAPL',1.1,2
'AAPL',.99,3};
[a,b,b] = unique(data(:,1));
d23 = cell2mat(data(:,2:3));
N = max(d23(:,2));
outdata = accumarray([d23(:,2),b],d23(:,1),[N numel(a)],[],NaN)
out = [{'Name'} a';num2cell([(1:N)',outdata])]
OR
out = [{'Name'},a';...
num2cell((1:N)'),accumarray([d23(:,2),b],d23(:,1),[N numel(a)],@(x){x},{NaN})];
small corrected in [N numel(a)]
4 Commenti
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Numeric Types in Help Center e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!