Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extracting unique values

I have data in two columns that looks as follows:

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

For all unique values in B I want to extract the corresponding value in column A and move it to a new matrix. I'm looking to then compute the mean of all the corresponding values in A and use as a dependent variable (weighted by no of observations per value in B) in a regression with the common value of B being the independent variable to reduce noise. Any help would on how to do this in Matlab (except running the regression) would be great!

Thanks

Oscar

like image 334
Oscar Avatar asked Apr 01 '26 13:04

Oscar


1 Answers

Here is an efficient solution:

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...

The result:

%# 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
like image 198
Amro Avatar answered Apr 04 '26 09:04

Amro



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!