取消堆栈表并使用附加到数字取消堆栈索引值的默认字符串重命名每个列

时间:2018-06-06 20:00:56

标签: matlab dataframe

我有一个数据集包含在表格中,我想要应用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);

据我所知,这是有效的,尽管我担心这在确保列以正确的顺序命名方面并不健全。也就是说,defaultColNamesunique获取其顺序,而列顺序将来自unstack,我基本上只是希望它们以相同的方式排序。也许他们这样做,但我仍然想知道是否有更强大的方法来做到这一点。

编辑更新:

我已经开发了以下函数,它似乎也可以使用regexprep之后的事实:

  Snew = unstack(S, vars, ivar);
  defaultName = [vars, '_', ivars];
  Snew.Properties.VariableNames = regexprep(Snew.Properties.VariableNames, ...
     'x(.*)', [defaultName, '$1']);

然而,这似乎并不是最强大的,因为'x(,*)'可能容易受到一些不可预测的输出的欺骗。或许这是一个很好的方法。评论会很棒。

0 个答案:

没有答案