在Matlab中对包含文本的表进行求和

时间:2015-07-13 14:45:29

标签: matlab function data-manipulation

给出示例表:

A = table({'test2';'test1';'test2';'test3';'test1'},...
[0.71;2.05;0.35;0.82;1.57],[0.23;0.12;0.18;0.23;0.41])

A = 
 Var1      Var2    Var3
_______    ____    ____

'test2'    0.71    0.23
'test1'    2.05    0.12
'test2'    0.35    0.18
'test3'    0.82    0.23
'test1'    1.57    0.41

如何创建包含列总和的最后一行,而不必使用“GroupingVariables”进行分组或直接指定变量(即,需要简单地对整个表中的那些数字列进行求和)? 然后,我想创建另一个表(B),其中每个条目除以相应列的总和(即,创建百分比值)。但是,不包括'GroupingVariables'参数将返回:

  

“cell”

类型的输入参数的未定义函数“sum”

并且数组类型操作不适用于表...

1 个答案:

答案 0 :(得分:6)

计算每个数字列的总和:

首先为数字列

定义索引
ind

如果您不知道哪些列是数字:按如下方式计算逻辑索引>> ind = table2array(varfun(@isnumeric, A));

ind

然后,您可以使用itertools.islice()>> sum(table2array(A(:,ind)),1) ans = 5.5000 1.1700 指定的列转换为数字数组,并对每列进行求和:

>> varfun(@sum, A(:,ind))
ans = 
    sum_Var2    sum_Var3
    ________    ________
    5.5         1.17

您还可以使用table2array,它允许您选择表格输出(默认)

>> varfun(@sum, A(:,ind), 'outputformat', 'uniform')
ans =
    5.5000    1.1700

或数字数组输出

varfun

将每个数字列标准化为1:

>> B = A; >> ind = table2array(varfun(@isnumeric, A)); >> A(:,ind) = varfun(@(x) x./sum(x), A(:,ind)); >> A = Var1 Var2 Var3 _______ ________ _______ 'test2' 0.12909 0.19658 'test1' 0.37273 0.10256 'test2' 0.063636 0.15385 'test3' 0.14909 0.19658 'test1' 0.28545 0.35043 与匿名函数一起使用:

{{1}}