我在Matlab一个矩阵A:分组通过嵌套唯一值
A = [176 5406 1 4 7903;
155 5406 1 5 7903;
122 5407 0 4 7903;
140 5407 0 5 7904;
130 5407 0 3 7904];
只为信息 - 第2栏是一个用户ID,而将第四列是时间。所以5406
是一个用户,5407
是另一个用户。这两个用户都有一些信息存储在我有兴趣访问的第一列和第四列中。
所以基本上我想要做的是:
对于每个用户把他们的价值的中位数在第一列。我已经编写了代码(如下),适用于此。
如果在每个用户5列两个相等的“时间”值,那么我想在平均4列的值,所以像用户
5406
时间值均为7903
,我想平均值的在第4栏 - 即4
和5
的平均值以一个值(4.5
)结尾。
但是例如用于下一用户5407
我将具有两个最终值 - 一个将是5和3的平均值(因为7904
重复)和一个将4(因为7903
不重复)。
我对如何做到这一点有点困惑,我知道需要有某种if
声明,但我一直坚持它的很长一段时间。谁能帮忙?
感谢
规范第一部分:
u=unique(A(:,2));
for i=1:size(u,1)
M=find(A(i,2)==u(i));
med(i)=median(A(M,1));
end
例如,我会使用逻辑索引来做第一件事,你可以使用:'median(A((A(:,2)== 5406),1))'为第一个用户,等等... – bla
我刚刚为这个问题的目的,使矩阵更小,但我有大约20,000用户,我不能列出每一个...... –
,但你可以循环在写入这个例子...只是用'u(i)'来代替值5406 – bla