web-dev-qa-db-ja.com

文字列内の「(」の出現回数を数える

Rの文字列で開いている括弧の数を取得しようとしています。str_count関数はstringrパッケージから

s<- "(hi),(bye),(hi)"
str_count(s,"(")

Stri_count_regex(string、pattern、opts_regex = attr(pattern、:)でエラーが発生しました。

この例では3を取得したいと考えています

14
NPHARD

(は特殊文字です。エスケープする必要があります:

str_count(s,"\\(")
# [1] 3

または、stringrを使用している場合、coll関数を使用できます。

str_count(s,coll("("))
# [1] 3
10
sebastian-c

ベース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
3
lmo

ベースRでそれを行いたい場合は、個々の文字のベクトルに分割し、"("直接(正規表現として表現せずに):

> s<- "(hi),(bye),(hi)"
> chars <- unlist(strsplit(s,""))
> length(chars[chars == "("])
[1] 3
3
John Coleman