2016-01-12 9 views
7

Come posso lanciare una tabella in modo che VariableNames diventa RowNamesCome trasporre una tabella MATLAB?

cioè

m0   m1   m10  m11  m12  m13  m14  m2   m3   m4   m5   m6   m7   m8   m9 
    ________ _______ _______ _______ _______ _______ _______ _______ _______ _______ ________ ________ _______ _______ _______ 

    0.096898 0.11567 0.23266 0.11393 0.51438 0.51438 0.51438 0.42039 0.11543 0.11024 0.060229 0.086558 0.11542 0.11537 0.43305 

diventa

 Chisq 
     _______ 
m0  0.096898 
m1  0.11567 
m2  ... 
...  ... 

risposta

9

è necessario convertire prima il vostro tavolo a un array prima di ruotare e di convertirlo nuovamente dentro un tavolo:

YourArray = table2array(YourTable); 
YourNewTable = array2table(YourArray.'); 
YourNewTable.Properties.RowNames = YourTable.Properties.VariableNames; 
.210

Si può anche provare rot90(YourTable) e vedere cosa succede, ma non sono sicuro che lo fa lo stesso (credo che sia uno di quei nomi ingannevoli)

+0

Questo potrebbe essere ridotto a 'nuovatabella = tavolo (YourTable {:,:}. ', ... ' RowNames ', YourTable.Properties.VariableNames) '. 'rot90' non accetta tabelle. – EBH

+1

Se la tabella contiene nomi per la riga, aggiungere questa riga: 'YourNewTable.Properties.VariableNames = YourTable.Properties.RowNames;' – traindriver

+0

Ho fatto lo stesso. Le mie variabili sono di tipi di dati diversi (uint8, float32 ecc.). Quando creo la nuova tabella, tutte le variabili sono espresse su uint16. Come posso evitare questo? – JohnDoe

0
function [tableTransposed] = transposeTable(tableIn) 
%this function transposes a table. 
props =tableIn.Properties.VariableNames; 

tableTransposed = table(); 
tableSz = size(tableIn); 
tableTransposed.metricName = props'; 
tableTransposed(1,:) = []; 
for newPropertyNum = 1:tableSz(1) 
    propCurr = table2array(tableIn(newPropertyNum,1)); 
    if isa(propCurr,'numeric') 
     newProperty = num2str(propCurr); 
    else %assumed to be string 
     newProperty = propCurr; 

    end 
    tableTransposed = setfield(tableTransposed,newProperty,table2array(tableIn(newPropertyNum,2:end))'); 
end 
+0

Com'è diverso dalla risposta accettata? – excaza