# Unique rows indexes in array

**URL:** <https://discourse.julialang.org/t/unique-rows-indexes-in-array/46588>\
**Category:** General Usage\
**Created:** [September 14, 2020, 2:34pm UTC](https://discourse.julialang.org/t/unique-rows-indexes-in-array/46588 "2020-09-14T14:34:35Z")\
**Posts on this page:** 15\
**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:** [September 14, 2020, 2:34pm UTC](https://discourse.julialang.org/t/unique-rows-indexes-in-array/46588/1 "2020-09-14T14:34:36Z")

</div>

```julia
julia> baza2
45805×9 Array{String,2}:
 "0" "000001" "1" "1"
 "1" "000002" "" "0"
 "2" "000002" "" "0"

julia> ia = unique(i -> baza2[:,6][i], 1:length( baza2[:,6]))
40378-element Array{Int64,1}:
     1
     2
     4

```

is ok .  
But if i need unique rowes from many cols:

```julia
julia> ia = unique(i -> baza2[:,5:8][i], 1:size(baza2[:,5:8],1),dims=1)
ERROR: MethodError: no method matching unique(::var"#19#20", ::UnitRange{Int64}; dims=1)
Closest candidates are:

```

Som idea?  
Paweł

---

<div class="post-metadata">

**Author:** ![mthelm85](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mthelm85/32/224164_2.png) [@mthelm85](https://discourse.julialang.org/u/mthelm85)\
**Post date:** [September 14, 2020, 2:58pm UTC](https://discourse.julialang.org/t/unique-rows-indexes-in-array/46588/2 "2020-09-14T14:58:22Z")

</div>

```julia
baza2 = ["0" "000001" "1" "1";
          "1" "000002" "" "0";
          "2" "000002" "" "0";
          "0" "000001" "1" "1"]

julia> ia = unique(baza2, dims=1)
3×4 Array{String,2}:
 "0" "000001" "1" "1"
 "1" "000002" "" "0"
 "2" "000002" "" "0"

```

FYI, this is documented and you can find it by typing `?` into your REPL and you’ll get:

```julia
 unique(A::AbstractArray; dims::Int)

  Return unique regions of A along dimension dims.

```

---

<div class="post-metadata">

**Author:** ![tomerarnon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tomerarnon/32/3170_2.png) [@tomerarnon](https://discourse.julialang.org/u/tomerarnon)\
**Post date:** [September 14, 2020, 3:08pm UTC](https://discourse.julialang.org/t/unique-rows-indexes-in-array/46588/3 "2020-09-14T15:08:18Z")

</div>

If you need the unique values, @mthelm85′s solution is best. From your example, it looks like you were looking for the indices of the unique values, in which case you might want a function like

```julia
function unique_inds(v)
    unq = Set{eltype(v)}()
    inds = Int[]
    for (i, x) in pairs(v)
       if x ∉ unq
           push!(inds, i)
           push!(unq, x)
       end
   end
   inds
end

```

```julia
julia> baza2 = ["0" "000001" "1" "1";
                 "1" "000002" "" "0";
                 "2" "000002" "" "0";
                 "0" "000001" "1" "1"];

julia> unique_inds(baza2[:, 1])
3-element Array{Int64,1}:
 1
 2
 3

julia> unique_inds.(eachrow(baza2))
4-element Array{Array{Int64,1},1}:
 [1, 2, 3]
 [1, 2, 3, 4]
 [1, 2, 3, 4]
 [1, 2, 3]

```

---

<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:** [September 14, 2020, 3:44pm UTC](https://discourse.julialang.org/t/unique-rows-indexes-in-array/46588/5 "2020-09-14T15:44:38Z")

</div>

Thanks, But I need list of rows … ia as number of rows.  
Paul

---

<div class="post-metadata">

**Author:** ![DNF](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dnf/32/10191_2.png) [@DNF](https://discourse.julialang.org/u/DNF)\
**Post date:** [September 14, 2020, 5:12pm UTC](https://discourse.julialang.org/t/unique-rows-indexes-in-array/46588/6 "2020-09-14T17:12:16Z")

</div>

> [@programista](#):
>
> `baza2[:,6][i]`

Here you make a slice and then pick out an element. That’s really wasteful, performance-wise. Just write

```julia
baza2[i, 6] 

```

> [@programista](#):
>
> `length( baza2[:,6])`

Here you create another slice. You should write

```julia
size(baza2, 1)

```

instead.

---

<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:** [September 14, 2020, 5:20pm UTC](https://discourse.julialang.org/t/unique-rows-indexes-in-array/46588/7 "2020-09-14T17:20:07Z")

</div>

Any reason you aren’t using a DataFrame for this data? Looks like a table-style data structure.

---

<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:** [September 14, 2020, 5:24pm UTC](https://discourse.julialang.org/t/unique-rows-indexes-in-array/46588/8 "2020-09-14T17:24:54Z")

</div>

No DataFrame , only Array{String,2}~

> [@programista](#):
>
> ```julia
> julia> baza2
> 45805×9 Array{String,2}:
> 
> ```

---

<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:** [September 14, 2020, 5:27pm UTC](https://discourse.julialang.org/t/unique-rows-indexes-in-array/46588/9 "2020-09-14T17:27:10Z")

</div>

> [@programista](#):
>
> ```julia
> ulia> ia = unique(i -> baza2[:,5:8][i], 1:size(baza2[:,5:8],1),dims=1)
> ERROR: MethodError: no method matching unique(::var"#19#20", ::UnitRange{Int64}; dims=1)
> Closest candidates are:
> 
> ```

Yes , size=1. But not works.

---

<div class="post-metadata">

**Author:** ![DNF](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dnf/32/10191_2.png) [@DNF](https://discourse.julialang.org/u/DNF)\
**Post date:** [September 14, 2020, 7:50pm UTC](https://discourse.julialang.org/t/unique-rows-indexes-in-array/46588/10 "2020-09-14T19:50:18Z")

</div>

No, I wasn’t telling you how to fix the error. I was saying, don’t write `baza2[:, 5:8][1]`, it is very wasteful. You should write `baza2[i, 5:8]`. And don’t write `size(baza2[:,5:8],1)`, write `size(baza2,1)` instead.

It will still give an error in your particular example. I’m just telling you how to access elements and how to calculate the size of arrays.

---

<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:** [September 14, 2020, 7:59pm UTC](https://discourse.julialang.org/t/unique-rows-indexes-in-array/46588/11 "2020-09-14T19:59:45Z")

</div>

Yes, but problem is in another place:

```julia

julia> ia = unique(i -> baza2[:,5][i], 1:size(baza2,1))
8839-element Array{Int64,1}:
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10

julia> ia = unique(i -> baza2[:,5:8][i], 1:size(baza2[:,5:8],1),dims=1)
ERROR: MethodError: no method matching unique(::var"#29#30", ::UnitRange{Int64}; dims=1)
Closest candidates are:
  unique(::Any, ::Any) at set.jl:178 got unsupported keyword argument "dims"

```

---

<div class="post-metadata">

**Author:** ![tomerarnon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tomerarnon/32/3170_2.png) [@tomerarnon](https://discourse.julialang.org/u/tomerarnon)\
**Post date:** [September 14, 2020, 8:08pm UTC](https://discourse.julialang.org/t/unique-rows-indexes-in-array/46588/12 "2020-09-14T20:08:03Z")

</div>

> [@programista](#):
>
> `baza2[:,5][i]`

Do you insists on indexing this way? 😆

The error says you are using a keyword `dims` not supported by `unique`. Your signature is

```julia
unique(::Function, ::Vector, dims = 1)

```

which does not exist. You can either do

```julia
unique(::Function, ::Vector)

```

or

```julia
unique(::Array, dims = 1)

```

At this stage though, it might help to take a look at the [julia manual](https://docs.julialang.org/en/v1/) to get a sense of the sorts of things you’re missing.

---

<div class="post-metadata">

**Author:** ![DNF](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dnf/32/10191_2.png) [@DNF](https://discourse.julialang.org/u/DNF)\
**Post date:** [September 14, 2020, 8:57pm UTC](https://discourse.julialang.org/t/unique-rows-indexes-in-array/46588/13 "2020-09-14T20:57:53Z")

</div>

> [@programista](#):
>
> Yes, but problem is in another place:
> 
> ```julia
> julia> ia = unique(i -> baza2[:,5][i], 1:size(baza2,1))
> 
> ```

Yes, it _is_ in another place. I’m just saying, please stop writing `baza2[:,5][i]`, it is hurting my eyes. Write `baza2[i, 5]` instead. It will not fix your problem, but it will still be better.

---

<div class="post-metadata">

**Author:** ![Henrique\_Becker](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/henrique_becker/32/15443_2.png) [@Henrique\_Becker](https://discourse.julialang.org/u/Henrique_Becker)\
**Post date:** [September 14, 2020, 9:09pm UTC](https://discourse.julialang.org/t/unique-rows-indexes-in-array/46588/14 "2020-09-14T21:09:43Z")

</div>

It is my understanding that programista first language is not english. It may be hard to get through the language barrier.

---

<div class="post-metadata">

**Author:** ![DNF](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dnf/32/10191_2.png) [@DNF](https://discourse.julialang.org/u/DNF)\
**Post date:** [September 14, 2020, 9:13pm UTC](https://discourse.julialang.org/t/unique-rows-indexes-in-array/46588/15 "2020-09-14T21:13:34Z")

</div>

Yes, we have interacted before. I’m just trying to be clear.

(@programista has also been around for several years, and created many posts and topics, so isn’t a newbie.)

---

<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:** [September 15, 2020, 7:11am UTC](https://discourse.julialang.org/t/unique-rows-indexes-in-array/46588/16 "2020-09-15T07:11:46Z")

</div>

Big Thanks! All is clear!
