# Sorting common elements into bins

**URL:** https://discourse.julialang.org/t/sorting-common-elements-into-bins/9564
**Category:** General Usage
**Created:** [March 7, 2018, 11:37am UTC](https://discourse.julialang.org/t/sorting-common-elements-into-bins/9564 "2018-03-07T11:37:47Z")
**Posts on this page:** 11
**Page:** 1

<div class="post-metadata">

### Author: ![colintbowers](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/colintbowers/32/8033_2.png) [@colintbowers](https://discourse.julialang.org/u/colintbowers)
#### Post date: [March 7, 2018, 11:37am UTC](https://discourse.julialang.org/t/sorting-common-elements-into-bins/9564/1 "2018-03-07T11:37:47Z")

</div>

Hi all,

I was just wondering if any tools already exist for sorting common elements of vectors or sets into bins? For example, for `x = [1,2,2,1,3,3,3,3,1]`, a routine that returns that there are 3 ones, 2 twos, and 4 threes.

Cheers,

Colin

---

<div class="post-metadata">

### Author: ![carstenbauer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/carstenbauer/32/4981_2.png) [@carstenbauer](https://discourse.julialang.org/u/carstenbauer)
#### Post date: [March 7, 2018, 11:45am UTC](https://discourse.julialang.org/t/sorting-common-elements-into-bins/9564/2 "2018-03-07T11:45:30Z")

</div>

Have a look at `fit` and `Histogram` in [StatsBase.jl](https://github.com/JuliaStats/StatsBase.jl):

[http://juliastats.github.io/StatsBase.jl/stable/empirical.html#Histograms-1](http://juliastats.github.io/StatsBase.jl/stable/empirical.html#Histograms-1)

Example:

```julia
julia> fit(Histogram, x, closed=:left, nbins=3).weights
3-element Array{Int64,1}:
 3
 2
 4

```

---

<div class="post-metadata">

### Author: ![Nosferican](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nosferican/32/9275_2.png) [@Nosferican](https://discourse.julialang.org/u/Nosferican)
#### Post date: [March 7, 2018, 11:53am UTC](https://discourse.julialang.org/t/sorting-common-elements-into-bins/9564/3 "2018-03-07T11:53:00Z")

</div>

```julia
x = [1,2,2,1,3,3,3,3,1]
using StatsBase
countmap(x)

```

---

<div class="post-metadata">

### Author: ![carstenbauer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/carstenbauer/32/4981_2.png) [@carstenbauer](https://discourse.julialang.org/u/carstenbauer)
#### Post date: [March 7, 2018, 11:53am UTC](https://discourse.julialang.org/t/sorting-common-elements-into-bins/9564/4 "2018-03-07T11:53:37Z")

</div>

even better, learned something 🙂

---

<div class="post-metadata">

### Author: ![nalimilan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nalimilan/32/147_2.png) [@nalimilan](https://discourse.julialang.org/u/nalimilan)
#### Post date: [March 7, 2018, 5:08pm UTC](https://discourse.julialang.org/t/sorting-common-elements-into-bins/9564/5 "2018-03-07T17:08:55Z")

</div>

You can also use the [FreqTables](https://github.com/nalimilan/FreqTables.jl) package, which will be more convenient if you need the result as an array. Finally in StatsBase there’s also the (poorly named) [`counts`](http://juliastats.github.io/StatsBase.jl/latest/counts.html#Counting-Functions-1) for small integer values.

---

<div class="post-metadata">

### Author: ![colintbowers](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/colintbowers/32/8033_2.png) [@colintbowers](https://discourse.julialang.org/u/colintbowers)
#### Post date: [March 7, 2018, 11:32pm UTC](https://discourse.julialang.org/t/sorting-common-elements-into-bins/9564/6 "2018-03-07T23:32:19Z")

</div>

Brilliant, that was exactly what I was looking for. Thanks.

Colin

---

<div class="post-metadata">

### Author: ![colintbowers](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/colintbowers/32/8033_2.png) [@colintbowers](https://discourse.julialang.org/u/colintbowers)
#### Post date: [March 7, 2018, 11:32pm UTC](https://discourse.julialang.org/t/sorting-common-elements-into-bins/9564/7 "2018-03-07T23:32:52Z")

</div>

Good to know thank you.

Cheers,

Colin

---

<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: [March 8, 2018, 12:07am UTC](https://discourse.julialang.org/t/sorting-common-elements-into-bins/9564/8 "2018-03-08T00:07:50Z")

</div>

If you have lots of these and they are all smaller than 127 then casting them to UInt8 and `countmap` has a fast algorithm to count them.

---

<div class="post-metadata">

### Author: ![colintbowers](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/colintbowers/32/8033_2.png) [@colintbowers](https://discourse.julialang.org/u/colintbowers)
#### Post date: [March 8, 2018, 1:05am UTC](https://discourse.julialang.org/t/sorting-common-elements-into-bins/9564/9 "2018-03-08T01:05:49Z")

</div>

Interesting. In my current use case I can’t guarantee \< 127, but that is useful to know.

Cheers,

Colin

---

<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: [March 8, 2018, 1:22am UTC](https://discourse.julialang.org/t/sorting-common-elements-into-bins/9564/10 "2018-03-08T01:22:37Z")

</div>

Actually there are fast algorithms for all integers types. Especially fast for U/Int8/16.

---

<div class="post-metadata">

### Author: ![colintbowers](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/colintbowers/32/8033_2.png) [@colintbowers](https://discourse.julialang.org/u/colintbowers)
#### Post date: [March 8, 2018, 2:08am UTC](https://discourse.julialang.org/t/sorting-common-elements-into-bins/9564/11 "2018-03-08T02:08:36Z")

</div>

Well 16 bit integers is definitely enough. I’ll look into it.

Cheers and thanks,

Colin
