подсчитать количество вхождений "(" в строке
Я пытаюсь получить количество открытых скобок в символьной строке в R. я использую
3 ответов
(
является специальным символом. Вы должны избежать его:
> str_count(s,"\(")
[1] 3
кроме того, учитывая, что вы используете stringr
можно использовать coll
функция:
str_count(s,coll("("))
[1] 3
Если вы хотите сделать это в базе R, вы можете разделить на вектор отдельных символов и подсчитать "("
напрямую (не представляя его как регулярное выражение):
> s<- "(hi),(bye),(hi)"
> chars <- unlist(strsplit(s,""))
> length(chars[chars == "("])
[1] 3
вы также можете использовать gregexpr
вместе с length
в базе R:
sum(gregexpr("(", s, fixed=TRUE)[[1]] > 0)
[1] 3
gregexpr
принимает вектор символов и возвращает список с начальными позициями каждого совпадения. Я добавил fixed=TRUE, чтобы соответствовать литералам.length
не будет работать, потому что gregexpr
возвращает 1, Если выражения не нашли.
если у вас есть вектор символов длиной больше одного, вам нужно будет подать результат в sapply
:
# new example
s<- c("(hi),(bye),(hi)", "this (that) other", "what")
sapply((gregexpr("(", s, fixed=TRUE)), function(i) sum(i > 0))
[1] 3 1 0