我有一个数据集包含在表格中,我想要应用unstack
方法。当MATLAB执行操作时,它会根据用于取消堆栈的索引变量(INDVAR
)为新列提供默认名称。但是,由于此情况下的索引变量是数字列,因此新列应用了默认的x
字符串(即x5, x10, x15
等。)
T_unstacked = unstack(T, 'varName', 'indexVarName')
我想用自己的方案命名新列,而不是默认名称,这可以通过使用'NewDataVariableNames'
作为输入参数来完成。但是,我必须事先定义其对应的celltring数组:
defaultColNames = strcat('myDefaultName_', arrayfun(@(x) {num2str(x)}, unique(T.(indexVarName)))
T_unstacked = unstack(T, 'varName', 'indexVarName', ...
'NewDataVariableNames', defaultColNames);
据我所知,这是有效的,尽管我担心这在确保列以正确的顺序命名方面并不健全。也就是说,defaultColNames
从unique
获取其顺序,而列顺序将来自unstack
,我基本上只是希望它们以相同的方式排序。也许他们这样做,但我仍然想知道是否有更强大的方法来做到这一点。
编辑更新:
我已经开发了以下函数,它似乎也可以使用regexprep
之后的事实:
Snew = unstack(S, vars, ivar);
defaultName = [vars, '_', ivars];
Snew.Properties.VariableNames = regexprep(Snew.Properties.VariableNames, ...
'x(.*)', [defaultName, '$1']);
然而,这似乎并不是最强大的,因为'x(,*)'
可能容易受到一些不可预测的输出的欺骗。或许这是一个很好的方法。评论会很棒。