# Counting number of occurences in an array

**URL:** <https://discourse.julialang.org/t/counting-number-of-occurences-in-an-array/31613>\
**Category:** Tooling\
**Tags:** question, statistics, arrays, splitapplycombine\
**Created:** [November 28, 2019, 9:37am UTC](https://discourse.julialang.org/t/counting-number-of-occurences-in-an-array/31613 "2019-11-28T09:37:24Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![WEEZEERAE](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/weezeerae/32/8918_2.png) [@WEEZEERAE](https://discourse.julialang.org/u/WEEZEERAE)\
**Post date:** [November 28, 2019, 9:37am UTC](https://discourse.julialang.org/t/counting-number-of-occurences-in-an-array/31613/1 "2019-11-28T09:37:24Z")

</div>

Hey people,

I’m struggling with the following problem:

I want to count the number of occurances for the values in an array, s.t. I can plot the result.  
I.e.

this is the array: A = [1,2,3,3,4,4,4,6]

and I want to find a way to get something out like: B = [1 1, 2 1, 3 2, 4 3, 6 1] a two dimensional array.

I tried it with loops and if conditions, but nothing has workes properly.

Thanks !

---

<div class="post-metadata">

**Author:** ![kdyrhage](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kdyrhage/32/2326_2.png) [@kdyrhage](https://discourse.julialang.org/u/kdyrhage)\
**Post date:** [November 28, 2019, 9:47am UTC](https://discourse.julialang.org/t/counting-number-of-occurences-in-an-array/31613/2 "2019-11-28T09:47:28Z")

</div>

Something like this?

```julia
A = [1,2,3,3,4,4,4,6]
B = [(i, count(==(i), A)) for i in unique(A)]

```

Edit: Sorry, that’s not a two dimensional array…

```julia
B = hcat([[i, count(==(i), A)] for i in unique(A)]...)

```

---

<div class="post-metadata">

**Author:** ![c42f](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/c42f/32/52842_2.png) [@c42f](https://discourse.julialang.org/u/c42f)\
**Post date:** [November 28, 2019, 9:52am UTC](https://discourse.julialang.org/t/counting-number-of-occurences-in-an-array/31613/3 "2019-11-28T09:52:29Z")

</div>

Hi! An efficient way to do this is to use the `counter` function from `DataStructures`:

```julia
julia> using DataStructures

julia> c = counter([1,2,3,3,4,4,4,6])
Accumulator{Int64,Int64} with 5 entries:
  4 => 3
  2 => 1
  3 => 2
  6 => 1
  1 => 1

```

you can then use the `keys(c)` and `values(c)` to plot the number of occurrences.

---

<div class="post-metadata">

**Author:** ![WEEZEERAE](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/weezeerae/32/8918_2.png) [@WEEZEERAE](https://discourse.julialang.org/u/WEEZEERAE)\
**Post date:** [November 28, 2019, 10:55am UTC](https://discourse.julialang.org/t/counting-number-of-occurences-in-an-array/31613/4 "2019-11-28T10:55:09Z")

</div>

Thank u, Chris!  
This was actually what I’ve been looking for.  
I still didn’t manage it perfectly to plot keys and values, since they are dict-types, but I’m on it!

---

<div class="post-metadata">

**Author:** ![c42f](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/c42f/32/52842_2.png) [@c42f](https://discourse.julialang.org/u/c42f)\
**Post date:** [November 28, 2019, 11:14am UTC](https://discourse.julialang.org/t/counting-number-of-occurences-in-an-array/31613/5 "2019-11-28T11:14:10Z")

</div>

You’re welcome. You may have to `collect` the keys and values? I’ve found that some plotting libraries get upset if you pass them iterables and it can be necessary to create an array instead.

---

<div class="post-metadata">

**Author:** ![WEEZEERAE](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/weezeerae/32/8918_2.png) [@WEEZEERAE](https://discourse.julialang.org/u/WEEZEERAE)\
**Post date:** [November 28, 2019, 11:18am UTC](https://discourse.julialang.org/t/counting-number-of-occurences-in-an-array/31613/6 "2019-11-28T11:18:23Z")

</div>

with collect it works, but the plot won’t give me out a proper histogram…  
I’m working with juliabox and tryed to make use of Plotly, but somehow that doesn’t work neither …

It feels like, need to spend ages 'till I get comfortable with Julia lol

---

<div class="post-metadata">

**Author:** ![c42f](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/c42f/32/52842_2.png) [@c42f](https://discourse.julialang.org/u/c42f)\
**Post date:** [November 28, 2019, 11:32am UTC](https://discourse.julialang.org/t/counting-number-of-occurences-in-an-array/31613/7 "2019-11-28T11:32:18Z")

</div>

Oh, if you want a histogram, you want a plotting tool designed for histograms. I’m not sure about plotly, but in PyPlot it’s `hist`.

---

<div class="post-metadata">

**Author:** ![xiaodai](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/xiaodai/32/15937_2.png) [@xiaodai](https://discourse.julialang.org/u/xiaodai)\
**Post date:** [November 28, 2019, 1:34pm UTC](https://discourse.julialang.org/t/counting-number-of-occurences-in-an-array/31613/8 "2019-11-28T13:34:01Z")

</div>

> [@c42f](#):
>
> An efficient way to do this is to use the `counter` function

IIRC `StatsBase.countmap` is faster

---

<div class="post-metadata">

**Author:** ![c42f](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/c42f/32/52842_2.png) [@c42f](https://discourse.julialang.org/u/c42f)\
**Post date:** [November 29, 2019, 1:46am UTC](https://discourse.julialang.org/t/counting-number-of-occurences-in-an-array/31613/9 "2019-11-29T01:46:22Z")

</div>

Thanks, it looks like `countmap` is a good option. I’ve been wanting a stdlib function for this for a while, so it will be nice to get it once `StatsBase` functionality (presumably) gets merged into `Statistics`.

---

<div class="post-metadata">

**Author:** ![c42f](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/c42f/32/52842_2.png) [@c42f](https://discourse.julialang.org/u/c42f)\
**Post date:** [December 18, 2019, 5:57am UTC](https://discourse.julialang.org/t/counting-number-of-occurences-in-an-array/31613/10 "2019-12-18T05:57:49Z")

</div>

Elsewhere @andyferris has just pointed out to me that `SplitApplyCombine` has a much more general version of this operation as `groupreduce`. And there’s a specific special case called `groupcount` which does what you want.

It seems `groupcount` and `countmap` are basically the same, though `countmap` offers some algorithm choices.

---

<div class="post-metadata">

**Author:** ![WEEZEERAE](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/weezeerae/32/8918_2.png) [@WEEZEERAE](https://discourse.julialang.org/u/WEEZEERAE)\
**Post date:** [December 18, 2019, 7:33am UTC](https://discourse.julialang.org/t/counting-number-of-occurences-in-an-array/31613/11 "2019-12-18T07:33:39Z")

</div>

Good point, I’ll work it out - thank you!
