MATLAB表平均

时间:2016-02-01 13:55:52

标签: matlab

我的MATALB talbe看起来像:

table_variables =

Meas   Group1    Group2    Subject_id    Age      Sex       Var1   Var2
___    _____     _____     __________    ___    ________    ____   ____

 1     'A'       '0'       1             60     'Male'      48     150
 2     'A'       '0'       1             60     'Male'      47     100
 3     'A'       '0'       1             60     'Male'      48     90
 4     'A'       '0'       1             60     'Male'      38     250
 1     'A'       '3'       2             50     'Male'      50     450
 2     'A'       '3'       2             50     'Male'      43     150      
 3     'A'       '3'       2             50     'Male'      45     100      
 ...
 ...

 1     'B'       '2'       900           66     'Female'    66     170      
 2     'B'       '2'       900           66     'Female'    68     110
 3     'B'       '2'       900           66     'Female'    70     250

对于每个主题,变量Var1和Var2有多个测量值。如何创建一个包含每个主题平均值的新表格?请假设我有两个以上的变量,所以代码:

mean_var1 =    varfun(@mean,T,'InputVariables','Var1',...
        'GroupingVariables','Subject_id')
mean_var2 =    varfun(@mean,T,'InputVariables','Var2',...
        'GroupingVariables','Subject_id')

1 个答案:

答案 0 :(得分:3)

varfun的文档中,'InputVariables'属性可以传递以下内容:

  

传递给A的{​​{1}}变量,指定为以逗号分隔的对   由func和正整数组成,向量为   正整数,变量名,变量名的单元数组或   逻辑向量,或返回逻辑的匿名函数   标量。

所以你有几个选择。一个例子,使用逻辑矢量掩码:

'InputVariables'

返回下表:

ID = [1, 1, 1, 2, 2, 2];
var_1 = [1, 2, 3, 4, 5, 6];
var_2 = fliplr(var_1);

t = table(ID.', var_1.', var_2.', 'VariableNames', {'ID', 'var_1', 'var_2'});

varmask = [false true true];
varmeans = varfun(@mean, t, 'InputVariables', varmask, 'GroupingVariables', 'ID');

此方法假定变量始终位于表的末尾。对于更强大的方法,您可能希望生成要处理的变量名称的单元格数组。

使用上面的例子:

varmeans = 

         ID    GroupCount    mean_var_1    mean_var_2
         __    __________    __________    __________

    1    1     3             2             5         
    2    2     3             5             2         

将返回相同的结果。我在这里使用了nvars = 2; varnames = sprintfc('var_%u', 1:nvars); % Caveat, sprintfc is an undocumented function varmeans = varfun(@mean, t, 'InputVariables', varnames, 'GroupingVariables', 'ID'); 来避免中间步骤,但请注意它是一个未记录的函数,所以通常的警告适用。