Извлечение уникальных значений - PullRequest
3 голосов
/ 24 августа 2011

У меня есть данные в двух столбцах, которые выглядят следующим образом:

A               B

1,265848208     3
-0,608043611    0
-0,285735893    0
0,006895134     7
0               7
-0,004526196    7
0,176326617     10
-0,159688071    2
0,22439945      2
-0,991045044    1
0,178022324     1
-0,270967397    4
0,285849994     4
1,881705539     23
1,057184204     10
NaN             10

Для всех уникальных значений в BI нужно извлечь соответствующее значение в столбце A и переместить его в новую матрицу.Затем я рассчитываю вычислить среднее значение всех соответствующих значений в A и использовать в качестве зависимой переменной (взвешенной по количеству наблюдений на одно значение в B) в регрессии с общим значением B, являющимся независимой переменной для уменьшения шума.Любая помощь в том, как сделать это в Matlab (кроме запуска регрессии), будет отличной!

Спасибо

Оскар

1 Ответ

5 голосов
/ 24 августа 2011

Вот эффективное решение:

X = [
    1.265848208     3
    -0.608043611    0
    -0.285735893    0
    0.006895134     7
    0               7
    -0.004526196    7
    0.176326617     10
    -0.159688071    2
    0.22439945      2
    -0.991045044    1
    0.178022324     1
    -0.270967397    4
    0.285849994     4
    1.881705539     23
    1.057184204     10
    NaN             10
];

%# unique values in B, and their indices
[valB,~,subs] = unique(X(:,2));

%# values of A for each unique number in B (cellarray)
valA = accumarray(subs, X(:,1), [], @(x) {x});

%# mean of each group
meanValA = cellfun(@nanmean, valA)

%# perform regression here...

Результат:

%# B values, mean of corresponding values in A, number of A values
>> [valB meanValA cellfun(@numel,valA)]
ans =
            0     -0.44689            2
            1     -0.40651            2
            2     0.032356            2
            3       1.2658            1
            4    0.0074413            2
            7   0.00078965            3
           10      0.61676            3
           23       1.8817            1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...