EJJ
EJJ

Reputation: 1513

count characters based on the order they appear

How does one count the characters based on the order they appear in a single length string. Below is an minimal example:

x <- "abbccdddaab"

First thought was this but it only counts them irrespective of order:

table(unlist(strsplit(x, "\\b")))

a b c d 
3 3 2 3 

But the desired output is:

a b c d a b
1 2 2 3 2 1

I would imagine the solution would require a for loop?

Upvotes: 2

Views: 46

Answers (2)

Ronak Shah
Ronak Shah

Reputation: 388982

Using data.table::rleid :

x <- "abbccdddaab"
tmp <- strsplit(x, "\\b")[[1]]
table(data.table::rleid(tmp))

#1 2 3 4 5 6 
#1 2 2 3 2 1 

Upvotes: 1

akrun
akrun

Reputation: 887168

We can use rle instead of table as rle returns the output as a list of values and lengths based on checking whether the adjacent elements are same or not

out <- rle(strsplit(x, "\\b")[[1]])
setNames(out$lengths, out$values)
# a b c d a b 
# 1 2 2 3 2 1 

Upvotes: 2

Related Questions