[R] interval between specific characters in a string...

Rui Barradas ru|pb@rr@d@@ @end|ng |rom @@po@pt
Sat Dec 3 09:48:36 CET 2022


Às 17:18 de 02/12/2022, Evan Cooch escreveu:
> Was wondering if there is an 'efficient/elegant' way to do the following 
> (without tidyverse). Take a string
> 
> abaaabbaaaaabaaab
> 
> Its easy enough to count the number of times the character 'b' shows up 
> in the string, but...what I'm looking for is outputing the 'intervals' 
> between occurrences of 'b' (starting the counter at the beginning of the 
> string). So, for the preceding example, 'b' shows up in positions
> 
> 2, 6, 7, 13, 17
> 
> So, the interval data would be: 2, 4, 1, 6, 4
> 
> My main approach has been to simply output positions (say, something 
> like unlist(gregexpr('b', target_string))), and 'do the math' between 
> successive positions. Can anyone suggest a more elegant approach?
> 
> Thanks in advance...
> 
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide 
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
Hello,

I don't find your solution inelegant, it's even easy to write it as a 
one-line function.


char_interval <- function(x, s) {
   lapply(gregexpr(x, s), \(y) c(head(y, 1), diff(y)))
}

target_string <-"abaaabbaaaaabaaab"
char_interval('b', target_string)
#> [[1]]
#> [1] 2 4 1 6 4


Hope this helps,

Rui Barradas



More information about the R-help mailing list