rray_unique()
: the unique values.
rray_unique_loc()
: the locations of the unique values.
rray_unique_count()
: the number of unique values.
rray_unique(x, axis) rray_unique_loc(x, axis) rray_unique_count(x, axis)
x | A vector, matrix, array, or rray. |
---|---|
axis | A single integer. The axis to index |
rray_unique()
: an array the same type as x
containing only
unique values. The dimensions of the return value are the same as
x
except on the axis
, which might be smaller than the original
dimension size if any duplicate entries were removed.
rray_unique_loc()
: an integer vector, giving locations of
the unique values.
rray_unique_count()
: an integer vector of length 1, giving the number
of unique values.
The family of unique functions work in the following manner:
x
is split into pieces using the axis
as the dimension to index along.
Each of those pieces is flattened to 1D.
The uniqueness test is done between those flattened pieces and the final output is restored from that result.
As an example, if x
has dimensions of (2, 3, 2)
and axis = 2
, then
you can think of x
as being broken into x[, 1]
, x[, 2]
and x[, 3]
.
Each of those three pieces are then flattened, and a vctrs unique function
is called on the list of those flattened inputs.
The result of calling rray_unique()
will always have the same
dimensions as x
, except along axis
, which is allowed to be less than
the original axis size if any duplicate entries are removed.
Unlike the duplicate functions, the unique functions only take a singular
axis
argument, rather than axes
. The reason for this is that if the
unique functions were defined in any other way, they would allow for ragged
arrays, which are not defined in rray.
When duplicates are detected, the first unique value is used in the result.
rray_duplicate_any()
for functions that work with the dual of
unique values: duplicated values.
vctrs::vec_unique()
for functions that detect unique values among
any type of vector object.
x_dup_rows <- rray(c(1, 1, 3, 3, 2, 2, 4, 4), c(2, 2, 2)) x_dup_rows <- rray_set_row_names(x_dup_rows, c("r1", "r2")) x_dup_rows <- rray_set_col_names(x_dup_rows, c("c1", "c2")) # Duplicate rows # `x_dup_rows[1] == x_dup_rows[2]` rray_unique(x_dup_rows, 1)#> <rray<dbl>[,2,2][1]> #> , , 1 #> #> c1 c2 #> r1 1 3 #> #> , , 2 #> #> c1 c2 #> r1 2 4 #># Duplicate cols # `x_dup_cols[, 1] == x_dup_cols[, 2]` x_dup_cols <- rray_transpose(x_dup_rows, c(2, 1, 3)) rray_unique(x_dup_cols, 2)#> <rray<dbl>[,1,2][2]> #> , , 1 #> #> r1 #> c1 1 #> c2 3 #> #> , , 2 #> #> r1 #> c1 2 #> c2 4 #># Duplicate 3rd dim # `x_dup_layers[, , 1] == x_dup_layers[, , 2]` x_dup_layers <- rray_transpose(x_dup_rows, c(2, 3, 1)) rray_unique(x_dup_layers, 3)#> <rray<dbl>[,2,1][2]> #> , , r1 #> #> [,1] [,2] #> c1 1 2 #> c2 3 4 #># rray_unique_loc() returns an # integer vector you can use # to subset out the unique values along # the axis you are interested in x_dup_cols[, rray_unique_loc(x_dup_cols, 2L)]#> <rray<dbl>[,1,2][2]> #> , , 1 #> #> r1 #> c1 1 #> c2 3 #> #> , , 2 #> #> r1 #> c1 2 #> c2 4 #># Only 1 unique column rray_unique_count(x_dup_cols, 2L)#> [1] 1# But 2 unique rows rray_unique_count(x_dup_cols, 1L)#> [1] 2