我有一列包含每个参与者的组 ID。共有三组,因此该列中的每个数字都是 1、2 或 3。
然后我有第二列,其中包含每个参与者的响应分数。我想计算每个组内的平均/中值响应分数。
我已经设法通过遍历每一行来做到这一点,但我觉得这是一个缓慢且次优的解决方案。有人可以建议一种更好的做事方式吗?
我有一列包含每个参与者的组 ID。共有三组,因此该列中的每个数字都是 1、2 或 3。
然后我有第二列,其中包含每个参与者的响应分数。我想计算每个组内的平均/中值响应分数。
我已经设法通过遍历每一行来做到这一点,但我觉得这是一个缓慢且次优的解决方案。有人可以建议一种更好的做事方式吗?
grpstats
是一个很好的功能(文档here)
这是嵌入式统计信息的列表:
它也接受函数句柄(例如:@mean
,@skeweness
)
>> groups = [1 1 1 2 2 2 3 3 3]';
>> data = [0 0 1 0 1 1 1 1 1]';
>> grpstats(data, groups, {'mean'})
ans =
0.3333
0.6667
1.0000
>> [mea, med] = grpstats(data, groups, {'mean', @median})
mea =
0.3333
0.6667
1.0000
med =
0
1
1
使用逻辑条件,例如假设您的数据在矩阵m
中如下:第一个 col 是ID
第二个 col 是响应分数,
mean(m(m(:,1)==1,2))
median(m(m(:,1)==1,2))
将为您提供1
响应分数等的平均值和中位数