Rの文字列で開いている括弧の数を取得しようとしています。str_count
関数はstringr
パッケージから
s<- "(hi),(bye),(hi)"
str_count(s,"(")
Stri_count_regex(string、pattern、opts_regex = attr(pattern、:)でエラーが発生しました。
この例では3を取得したいと考えています
(
は特殊文字です。エスケープする必要があります:
str_count(s,"\\(")
# [1] 3
または、stringr
を使用している場合、coll
関数を使用できます。
str_count(s,coll("("))
# [1] 3
ベースRでgregexpr
とともにlength
を使用することもできます。
sum(gregexpr("(", s, fixed=TRUE)[[1]] > 0)
[1] 3
gregexpr
は文字ベクトルを受け取り、各一致の開始位置を含むリストを返します。リテラルと一致させるためにfixed = TRUEを追加しました。length
は機能しません。サブ式が見つからない場合、gregexpr
は-1を返すためです。
長さが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
ベースRでそれを行いたい場合は、個々の文字のベクトルに分割し、"("
直接(正規表現として表現せずに):
> s<- "(hi),(bye),(hi)"
> chars <- unlist(strsplit(s,""))
> length(chars[chars == "("])
[1] 3