在 Matlab 中包含文本的求和表
Summing tables that include text in Matlab
举个例子table:
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' 进行分组或直接指定变量(即需要简单地对整个 table 求和)对于那些数字列)?
然后我想创建另一个 table (B),其中每个条目除以相应列的总和(即创建一个百分比值)。但是,不包括 'GroupingVariables' 参数 returns:
Undefined function 'sum' for input arguments of type 'cell'
并且数组类型操作不适用于 tables...
要计算每个数字列的总和:
首先为数字列定义一个索引
>> ind = [2 3];
如果您不知道哪些列是数字:按如下方式计算逻辑索引ind
>> ind = table2array(varfun(@isnumeric, A));
然后您可以使用 table2array
将 ind
指定的列转换为数值数组,并对每一列求和:
>> sum(table2array(A(:,ind)),1)
ans =
5.5000 1.1700
您也可以使用 varfun
,这样您就可以选择 table 输出(默认)
>> varfun(@sum, A(:,ind))
ans =
sum_Var2 sum_Var3
________ ________
5.5 1.17
或数值数组输出
>> varfun(@sum, A(:,ind), 'outputformat', 'uniform')
ans =
5.5000 1.1700
将每个数字列归一化为总和 1:
将 varfun
与匿名函数一起使用:
>> 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
举个例子table:
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' 进行分组或直接指定变量(即需要简单地对整个 table 求和)对于那些数字列)? 然后我想创建另一个 table (B),其中每个条目除以相应列的总和(即创建一个百分比值)。但是,不包括 'GroupingVariables' 参数 returns:
Undefined function 'sum' for input arguments of type 'cell'
并且数组类型操作不适用于 tables...
要计算每个数字列的总和:
首先为数字列定义一个索引
>> ind = [2 3];
如果您不知道哪些列是数字:按如下方式计算逻辑索引ind
>> ind = table2array(varfun(@isnumeric, A));
然后您可以使用 table2array
将 ind
指定的列转换为数值数组,并对每一列求和:
>> sum(table2array(A(:,ind)),1)
ans =
5.5000 1.1700
您也可以使用 varfun
,这样您就可以选择 table 输出(默认)
>> varfun(@sum, A(:,ind))
ans =
sum_Var2 sum_Var3
________ ________
5.5 1.17
或数值数组输出
>> varfun(@sum, A(:,ind), 'outputformat', 'uniform')
ans =
5.5000 1.1700
将每个数字列归一化为总和 1:
将 varfun
与匿名函数一起使用:
>> 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