我在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