Skip to content

counting entries in vector

8 messages · Ben Bolker, Stavros Macrakis, Ian Fiske +4 more

#
Hi all,
I've a vector with entries, which are all of the same type, e.g. string:
k <- c("bb", "bb", "bb", "aa", "cc", "cc")
and want to create a second vector containing the number of each entry
in k in the same order as in k, i.e.
c(3, 1, 2)

or:
k <- c(5,5,5,5,2,2,4)
=> c(4,2,1)

thanks
#
axionator <axionator <at> gmail.com> writes:
table(k)


  Ben Bolker
#
Take a look at the run-length encoding function rle.  I believe
rle(k)$lengths gives you exactly what you want.

            -s
On Wed, Feb 4, 2009 at 10:19 AM, axionator <axionator at gmail.com> wrote:
#
Try:

table(k)[rank(unique(k))]

-ian
Armin Meier wrote:

  
    
#
try this:

k <- c("bb", "bb", "bb", "aa", "cc", "cc")

f <- factor(k, levels = unique(k))
as.vector(table(f))

you can put it in one line but it's less readable. I hope it helps.

Best,
Dimitris
axionator wrote:

  
    
#
Its not clear whether c("bb", "bb", "aa", "aa", "bb") can occur
or if it can how it should be handled but this gives the lengths
of each run and so would give c(2, 2, 1) in that case (as opposed
to c(3, 2)):

rle(k)$lengths
On Wed, Feb 4, 2009 at 10:19 AM, axionator <axionator at gmail.com> wrote: