如何翻转桌子,使
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 ...
... ...
您需要先将表格转换为数组,然后再旋转并将其转换回表格:
YourArray = table2array(YourTable);
YourNewTable = array2table(YourArray.');
YourNewTable.Properties.RowNames = YourTable.Properties.VariableNames;
您也可以尝试
rot90(YourTable)
,看看会发生什么,但我不确定它是否会起到同样的作用(我认为这是那些误导性的名称之一)
从 MATLAB R2018a 开始,您还可以使用 ROWS2VARS 函数。 我发现这个函数在表中添加了一个名为
OriginalVariableNames
的附加列,这可能不是您想要的。
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
这基本上只是已经建议的一行版本:
T_transposed = array2table(table2array(T)', 'RowNames', T.Properties.VariableNames, 'VariableNames', T.Properties.RowNames)
如果表中没有行名称,则需要删除部分
'VariableNames', T.Properties.RowNames
。
MATLAB 目前(2024 年)建议使用 rows2vars,但它将变量名称放在其他变量之前的新变量(列)中。由于某种原因,尽管建议使用字符串而不是字符数组元胞数组,但它对第一列使用字符数组元胞数组而不是字符串数组。同样奇怪的是,除了添加新变量之外,没有其他选择来设置 RowNames。