【问题标题】:MATLAB table averagesMATLAB 表平均值
【发布时间】:2016-11-18 04:53:27
【问题描述】:

我的 MATALB 表看起来像:

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 都有多个测量值。如何创建一个包含每个主题平均值的新表?请假设我有超过 2 个变量,所以代码:

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

【问题讨论】:

  • 只需在表格列上使用mean 函数,例如mean( tablename.Var1 ).
  • 嗨 Mattihias,我很抱歉...我只是在更新我的问题...有没有办法同时为所有变量执行此操作(定义分组变量)
  • 提供的代码有什么问题?
  • 它有效,但是如果我有 100 个变量来取平均值,我不想为每个变量都这样做...我想知道是否还有其他方法..
  • @gabboshow - 你有Database Toolbox 吗?使用 SQL 可能很容易做到这一点。 (...甚至可能使用一些有创意的 Excel)。

标签: matlab


【解决方案1】:

varfun 的文档中,'InputVariables' 属性可以通过以下方式传递:

A 的变量传递给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');

将返回相同的结果。我在这里使用了sprintfc 来避免中间步骤,但请注意它是一个未记录的函数,因此通常需要注意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-30
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 2011-02-03
    • 1970-01-01
    相关资源
    最近更新 更多