如何转置 MATLAB 表格?

问题描述 投票:0回答:4

如何翻转桌子,使

VariableNames
变成
RowNames

   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

变成

        Chisq
        _______
m0       0.096898
m1        0.11567
m2        ...
...       ...
matlab
4个回答
13
投票

您需要先将表格转换为数组,然后再旋转并将其转换回表格:

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

您也可以尝试

rot90(YourTable)
,看看会发生什么,但我不确定它是否会起到同样的作用(我认为这是那些误导性的名称之一)


1
投票

从 MATLAB R2018a 开始,您还可以使用 ROWS2VARS 函数。 我发现这个函数在表中添加了一个名为

OriginalVariableNames
的附加列,这可能不是您想要的。


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
投票

这基本上只是已经建议的一行版本:

T_transposed = array2table(table2array(T)', 'RowNames', T.Properties.VariableNames, 'VariableNames', T.Properties.RowNames)

如果表中没有行名称,则需要删除部分

'VariableNames', T.Properties.RowNames

MATLAB 目前(2024 年)建议使用 rows2vars,但它将变量名称放在其他变量之前的新变量(列)中。由于某种原因,尽管建议使用字符串而不是字符数组元胞数组,但它对第一列使用字符数组元胞数组而不是字符串数组。同样奇怪的是,除了添加新变量之外,没有其他选择来设置 RowNames。

© www.soinside.com 2019 - 2024. All rights reserved.