# How to leave only unique rows of array

**URL:** https://discourse.julialang.org/t/how-to-leave-only-unique-rows-of-array/112332
**Category:** General Usage
**Created:** [March 30, 2024, 4:46pm UTC](https://discourse.julialang.org/t/how-to-leave-only-unique-rows-of-array/112332 "2024-03-30T16:46:07Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![programista](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/programista/32/5372_2.png) [@programista](https://discourse.julialang.org/u/programista)
#### Post date: [March 30, 2024, 4:46pm UTC](https://discourse.julialang.org/t/how-to-leave-only-unique-rows-of-array/112332/1 "2024-03-30T16:46:07Z")

</div>

These are two columns of a string matrix. How to leave only unique rows of these 12 array rows? :

```Kalinka
Kalinka surname
Kalinka surname
Kalinka surname
Kalinka geographical_name
Kalinka geographical_name
Kalinka geographical_name
Kalinka geographical_name
Kalinko surname
Kalinko surname
Kalinka name
Kalinka name

```

---

<div class="post-metadata">

### Author: ![stevengj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevengj/32/71_2.png) [@stevengj](https://discourse.julialang.org/u/stevengj)
#### Post date: [March 30, 2024, 5:53pm UTC](https://discourse.julialang.org/t/how-to-leave-only-unique-rows-of-array/112332/2 "2024-03-30T17:53:05Z")

</div>

See [Unique (indices) method similar to MATLAB](https://discourse.julialang.org/t/unique-indices-method-similar-to-matlab/34446) — for example, if you have a matrix `a` and you want the rows corresponding to whether columns 1 and 2 are unique, you could do:

```julia
julia> a = [ "Kalinka" "surname"
        "Kalinka" "surname"
        "Kalinka" "surname"
        "Kalinka" "geographical_name"
        "Kalinka" "geographical_name"
        "Kalinka" "geographical_name"
        "Kalinka" "geographical_name"
        "Kalinko" "surname"
        "Kalinko" "surname"
        "Kalinka" "name"
        "Kalinka" "name"];

julia> idx = unique(i -> (a[i,1], a[i,2]), axes(a, 1))
4-element Vector{Int64}:
  1
  4
  8
 10

julia> a[idx,:] # rows where (col1, col2) are unique
4×2 Matrix{String}:
 "Kalinka" "surname"
 "Kalinka" "geographical_name"
 "Kalinko" "surname"
 "Kalinka" "name"

```

```julia

```

---

<div class="post-metadata">

### Author: ![Dan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dan/32/42581_2.png) [@Dan](https://discourse.julialang.org/u/Dan)
#### Post date: [March 30, 2024, 6:24pm UTC](https://discourse.julialang.org/t/how-to-leave-only-unique-rows-of-array/112332/3 "2024-03-30T18:24:45Z")

</div>

Also, you can consider using DataFrames:

```julia
using DataFrames
using CSV

s = """name cname
Kalinka surname
Kalinka surname
Kalinka surname
Kalinka geographical_name
Kalinka geographical_name
Kalinka geographical_name
Kalinka geographical_name
Kalinko surname
Kalinko surname
Kalinka name
Kalinka name"""

f = IOBuffer(s)

df = CSV.read(f, DataFrame)

```

Now `unique` drops repeating lines:

```julia
julia> unique(df)
4×2 DataFrame
 Row │ name cname             
     │ String7 String31          
─────┼────────────────────────────
   1 │ Kalinka surname
   2 │ Kalinka geographical_name
   3 │ Kalinko surname
   4 │ Kalinka name

```

---

<div class="post-metadata">

### Author: ![programista](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/programista/32/5372_2.png) [@programista](https://discourse.julialang.org/u/programista)
#### Post date: [March 30, 2024, 6:33pm UTC](https://discourse.julialang.org/t/how-to-leave-only-unique-rows-of-array/112332/4 "2024-03-30T18:33:09Z")

</div>

Big Thx, But apart from the columns I showed, I have others columns that I cannot lose. How to select entire unique rows of columns 2 and 3 from a 3-column matrix. Another way is how to get the numbers of unique rows mat[:,2:3]? julia\> mat  
20×3 Matrix{Any}:  
“aa” “aa” “”  
“Aachen” “Aachen” “nazwa\_geograficzna”  
“AAP” “AAP” “nazwa\_instytucji”  
“Aarona” “Aaron” “imię”  
“Aaron” “Aaron” “imię”  
“Aaronach” “Aaron” “imię”  
“Aaronami” “Aaron” “imię”  
“Aaronem” “Aaron” “imię”  
“Aaroni” “Aaron” “imię”  
“Aaronie” “Aaron” “imię”  
“Aaronom” “Aaron” “imię”  
“Aaronowi” “Aaron” “imię”  
“Aaronowie” “Aaron” “imię”  
“Aaronów” “Aaron” “imię”  
“Aarony” “Aaron” “imię”  
“aaronowa” “aaronowy” “”  
“aaronową” “aaronowy” “”  
“aaronowe” “aaronowy” “”  
“aaronowego” “aaronowy” “”  
“aaronowej” “aaronowy” “”

---

<div class="post-metadata">

### Author: ![pdeffebach](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pdeffebach/32/10320_2.png) [@pdeffebach](https://discourse.julialang.org/u/pdeffebach)
#### Post date: [March 30, 2024, 7:32pm UTC](https://discourse.julialang.org/t/how-to-leave-only-unique-rows-of-array/112332/5 "2024-03-30T19:32:58Z")

</div>

I really recommend you use DataFrames.jl for this task. Is there a reason you want to keep it a matrix?

---

<div class="post-metadata">

### Author: ![rocco\_sprmnt21](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rocco_sprmnt21/32/20127_2.png) [@rocco\_sprmnt21](https://discourse.julialang.org/u/rocco_sprmnt21)
#### Post date: [March 30, 2024, 8:26pm UTC](https://discourse.julialang.org/t/how-to-leave-only-unique-rows-of-array/112332/6 "2024-03-30T20:26:26Z")

</div>

```julia
stack(unique(e->(e[2],e[3]),eachrow(m)),dims=1)

```

```julia
function runique(m, cols)
    idx=Vector{Int}(undef,size(m, 1))
    u=NaN
    ui=1
    for r in axes(m, 1)
        if u!= @view m[r,cols] 
            idx[ui]=r
            ui+=1
            u= @view m[r,cols]
        end
    end
    @views m[idx[1:ui-1],:]
end

```

```julia
using DataFrames

df=DataFrame(m,:auto)

combine(first,groupby(df,[:x2,:x3]))

```

but the best, as many suggest, is

```julia
unique(df,[:x2,:x3])

```
