Count the number of unique values in a vector. vec_count() has two
important differences to table(): it returns a data frame, and when
given multiple inputs (as a data frame), it only counts combinations that
appear in the input.
Usage
vec_count(x, sort = c("count", "key", "location", "none"))Arguments
- x
A vector (including a data frame).
- sort
One of "count", "key", "location", or "none".
"count", the default, puts most frequent values at top
"key", orders by the output key column (i.e. unique values of
x)"location", orders by location where key first seen. This is useful if you want to match the counts up to other unique/duplicated functions.
"none", leaves unordered. This is not guaranteed to produce the same ordering across R sessions, but is the fastest method.
Examples
vec_count(mtcars$vs)
#> key count
#> 1 0 18
#> 2 1 14
vec_count(iris$Species)
#> key count
#> 1 setosa 50
#> 2 versicolor 50
#> 3 virginica 50
# If you count a data frame you'll get a data frame
# column in the output
str(vec_count(mtcars[c("vs", "am")]))
#> 'data.frame': 4 obs. of 2 variables:
#> $ key :'data.frame': 4 obs. of 2 variables:
#> ..$ vs: num 0 1 1 0
#> ..$ am: num 0 1 0 1
#> $ count: int 12 7 7 6
# Sorting ---------------------------------------
x <- letters[rpois(100, 6)]
# default is to sort by frequency
vec_count(x)
#> key count
#> 1 d 18
#> 2 f 18
#> 3 g 18
#> 4 h 12
#> 5 c 9
#> 6 e 9
#> 7 i 5
#> 8 j 3
#> 9 l 3
#> 10 k 3
#> 11 a 1
#> 12 b 1
# by can sort by key
vec_count(x, sort = "key")
#> key count
#> 1 a 1
#> 2 b 1
#> 3 c 9
#> 4 d 18
#> 5 e 9
#> 6 f 18
#> 7 g 18
#> 8 h 12
#> 9 i 5
#> 10 j 3
#> 11 k 3
#> 12 l 3
# or location of first value
vec_count(x, sort = "location")
#> key count
#> 1 h 12
#> 2 c 9
#> 3 d 18
#> 4 a 1
#> 5 e 9
#> 6 i 5
#> 7 j 3
#> 8 f 18
#> 9 g 18
#> 10 l 3
#> 11 b 1
#> 12 k 3
head(x)
#> [1] "h" "h" "h" "h" "c" "h"
# or not at all
vec_count(x, sort = "none")
#> key count
#> 1 e 9
#> 2 a 1
#> 3 c 9
#> 4 k 3
#> 5 g 18
#> 6 f 18
#> 7 d 18
#> 8 l 3
#> 9 j 3
#> 10 b 1
#> 11 h 12
#> 12 i 5
