A<- c('C-C-C','C-C', 'C-C-C-C')
library(stringr)
B<- str_count(A, "C-C")
df<- data.frame(A,B)
A B (expected) B(actual)
C-C-C 2 1
C-C 1 1
C-C-C-C 3 2
我正在尝试计算所有的转换,但是,我得到了错误的答案。有人能建议如何解决这个问题吗?
您期望字符串被允许重叠,但事实并非如此。为此,您需要进行前瞻。
str_count(A, "C(?=-C)")
#[1] 2 1 3
或计数-
:
str_count(A, "-")
#[1] 2 1 3
或在基础中:
lengths(gregexpr("C(?=-C)", A, perl=TRUE))
#[1] 2 1 3
str_count
包装stringi::stri_count
。虽然它不允许您指定可选的参数,但您可以直接调用stri_count
。
stringi::stri_count(str = A, pattern = "C-C", fixed = stringi::stri_opts_fixed(overlap = TRUE))
在base R
中使用gsub
和nchar
nchar(gsub("[^-]+", "", A))
#[1] 2 1 3