# Using SUM and UNIQUE to Count the Values ​​of Values ​​in a Subset of a Matrix

So, suppose such a matrix is:

``````20 2
20 2
30 2
30 1
40 1
40 1
```

```

I want to count the number of times 1 for each unique value of column 1. I could do it the long way [sum (x (1: 2,2) == 1)] for each value, but I think it would be ideal use for UNIQUE functions. How can I fix this to get output like this:

``````20 0
30 1
40 2
```

```

Sorry if the solution seems obvious, my understanding of loops is very poor.

+3

source to share

A really unique option is a good option:

``````u=unique(x(:,1))
res=arrayfun(@(y)length(x(x(:,1)==y & x(:,2)==1)),u)
```

```

Separating this last line:

• arrayfun (fun, array) applies fun to each element of the array and puts it into a new array that it returns.
• This function is a function `@(y)length(x(x(:,1)==y & x(:,2)==1))`

that finds the length of the part of x where a condition is met `x(:,1)==y & x(:,2)==1)`

(called boolean indexing). So for each of the unique elements, it finds a string in X, where the first is the unique element and the second is one.
+2

source

Try this (as pointed out in this answer ):

``````>>> [c,~,d] = unique(a(a(:,2)==1))
c =
30
40

d =
1
3

>>> counts = accumarray(d(:),1,[],@sum)
counts =
1
2

>>> res = [c,counts]
```

```
+1

source

You have an array of distinct integers in 'array'

the function `tabulate`

sorts unique values ​​and counts events.

``````table = tabulate(array)
```

```

find your unique account in the col column of table 2.

+1

source

All Articles