Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 计算表中某列中某些行的平均值_Matlab_Mean - Fatal编程技术网

Matlab 计算表中某列中某些行的平均值

Matlab 计算表中某列中某些行的平均值,matlab,mean,Matlab,Mean,我有一个带有表格的.csv文件,我导入了该文件,如下所示: mydata = readtable('datafile1.csv'); 该表有2549行和28列。下面是表格的一部分,包括除某些行以外的所有列,以给出一个示例: ID subject A B C D E F G H I J K L M N

我有一个带有表格的.csv文件,我导入了该文件,如下所示:

mydata = readtable('datafile1.csv');
该表有2549行和28列。下面是表格的一部分,包括除某些行以外的所有列,以给出一个示例:

ID          subject A                   B   C                   D       E       F       G       H   I   J    K       L  M   N                   O    P      Q   R       S   T   U   V                   W   X   Y
'sbj05100'  'sbj05' 6.22316646575928    85  -2.31806182861328   339 14  100022  'tf'    48401   100 2   2   'no'    'h' 339 322.507000000000    339 'sbj05' 100 100021  286 1   419 1.95000000000000    2   1   662
'sbj05102'  'sbj05' 7.60787820816040    65  3.00547647476196    405 17  102012  'tf'    59201   102 1   2   'yes'   'h' 405 385.367000000000    405 'sbj05' 102 102011  283 1   283 1.89000000000000    1   1   364
'sbj05104'  'sbj05' -3.71897959709167   81  3.80262303352356    429 19  104012  'tf'    66401   104 1   2   'yes'   'h' 429 408.228000000000    429 'sbj05' 104 104011  266 1   266 2.19000000000000    2   1   244
'sbj09152'  'sbj09' 0.181026369333267   88  -0.0696721449494362 87  4   152042  'tf'    12401   152 4   2   'no'    'l' 87  82.8280000000000    87  'sbj09' 152 152041  297 1   297 1.25000000000000    1   1   354
'sbj09157'  'sbj09' 0.309507131576538   116 0.226024463772774   51  2   157042  'tf'    5201    157 4   2   'no'    'l' 51  48.4870000000000    51  'sbj09' 157 157041  273 1   273 1.45000000000000    1   1   279
'sbj10151'  'sbj10' 6.99367523193359    90  4.86872243881226    345 20  151022  'tf'    70001   151 2   2   'no'    'h' 345 328.224000000000    345 'sbj10' 151 151021  198 1   198 3                   1   1   310
'sbj10167'  'sbj10' 2.25431561470032    152 -0.200379326939583  129 7   167012  'tf'    23201   167 1   2   'yes'   'h' 129 122.675000000000    129 'sbj10' 167 167011  110 1   110 2.32000000000000    2   1   276
'sbj10168'  'sbj10' 3.22731518745422    147 4.72183227539062    93  3   168042  'tf'    8801    168 4   2   'no'    'l' 93  88.3230000000000    93  'sbj10' 168 168041  179 1   179 2.38000000000000    2   1   132
我需要计算每个受试者(受试者列)和每个条件(第一列)的B列和C列的平均值。 我想得到的是:

for sbj05 column B --> cond 1 = (65+81)/2
                       cond2 = 85
          column C --> cond 1 = (3.005476475+3.802623034)/2
                       cond2 = -2.3180618
and so on...
我试着跟踪这个链接

但我得到了这个错误:

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


有什么建议吗

方便的是,Matlab有一个计算表格统计数据的功能。因此,您可能需要使用
grpstats
,而不是
accumarray

meanPerSubjectAndCondition = grpstats(mydata,{'subject','I'},'mean','DataVars',{'B','C'})

为什么
列B->cond 1=(65+81)/2
而不是
(65+81+152)/3
,只要它的
I
值是1?因为列I中第一行的对应值是2,所以条件2。如果为1,则为是,正如您所说的
(65+81+152)/3
。是的,错误表明您已将文件作为表格导入,要使用accumarray,则希望将文件作为单元格数组导入。但是,在表格格式中,您可以使用Matlab表格分组函数,例如
varfun
,它应该完全符合您的描述:@dede my bad,没有理解第二列的内容,非常感谢@Jonas。它工作得很好,只有一行。对于2549行,grpstats将非常有效。人们应该意识到,对于非常大的表,grpstats(至少在2015b实现时)相当慢。在我的机器上的示例:一个包含2000组的100万条目,grpstats需要4.26秒,而accumarray需要0.15秒。
meanPerSubjectAndCondition = grpstats(mydata,{'subject','I'},'mean','DataVars',{'B','C'})