使用R计算字符串中的连续模式

Rob*_*dan 11 r stringr

我正在尝试编写一个函数来计算模式的连续实例数.举个例子,我喜欢这个字符串

string<-"A>A>A>B>C>C>C>A>A"
Run Code Online (Sandbox Code Playgroud)

被转化为

"3 A > 1 B > 3 C > 2 A"
Run Code Online (Sandbox Code Playgroud)

我有一个函数来计算每个字符串的实例,见下文.但它没有达到我想要的排序效果.任何想法或指针?

谢谢,

[R

现有功能:

fnc_gen_PathName <- function(string) {
p <- strsplit(as.character(string), ";")
p1 <- lapply(p, table)
p2 <- lapply(p1, function(x) {
sapply(1:length(x), function(i) {
  if(x[i] == 25){
    paste0(x[i], "+ ", names(x)[i])
  } else{
    paste0(x[i], "x ", names(x)[i])
  }
})
})
p3 <- lapply(p2, function(x) paste(x, collapse = "; "))
p3 <- do.call(rbind, p3)
return(p3)
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*urg 10

正如@MrFlick所评论,您可以使用rle和尝试以下内容strsplit

with(rle(strsplit(string, ">")[[1]]), paste(lengths, values, collapse = " > "))
## [1] "3 A > 1 B > 3 C > 2 A"
Run Code Online (Sandbox Code Playgroud)