これがばかげた質問である場合は申し訳ありませんが、私はRに本当に慣れていません。私が疑問に思っているのは、gsubまたは同様の機能内で除外を指定する方法はありますか? 私のデータは次のようになります: (15: .0234 , 12: .0151), 先頭の 15 をこの (a: .b , c: .d) パターンに一致する別のアイテムに置き換えたい. ただし、gsub を呼び出すだけで、先頭の 15 が新しいパターンに置き換えられ、小数点以下の 15 が置き換えられます。これらのパターンがネストされているため、最初に出現したものだけを置き換えるように単純に指示してもうまくいきません。私が考えているのは、gsub から小数点の後に空白が続く数字を除外することです。これは可能ですか?
6 に答える
gsub で設定perl=TRUE
すると、問題を解決する可能性のある正と負の先読みまたは後読みを使用できます。たとえば、パターン15(?=:)
はコロンが続く 15 に一致し (ただし、コロンには一致/置換しません)、一致しません。コロンが続かない 15 に一致します。パターン `(?
詳細について?regex
は、「perl」セクションを参照してください。
(a, b, c, d, ...)
正規表現を使用する代わりに、文字列をベクトルに解析することを検討します。たとえば、次のことができます。
strsplit("15: .0234, 12: .0151", ": |, ")
# [[1]]
# [1] "15" ".0234" "12" ".0151"
次に、、、、、など==
の関数match
を使用して置換を行う方がはるかに簡単です。%in%
[
完了したら、 を使用して元に戻すことができますpaste
。
「先頭の 15」のみを置き換える方法を示すことはできますが、これらのネストされたパターンを置き換えたい、または置き換えたくないテスト ケースを生成するコードを提供していないため、これは少し推測です。
vec <- c('15: .0234' , '12: .0151')
gsub("^15", "aa", vec)
#[1] "aa: .0234" "12: .0151"
正規表現パターンの「^」記号は、文字列の先頭を示します。
gsub("^15","a: .b , c: .d","15: .0234 , 12: .0151")
これで問題は解決しますか?
除外するよりも含める方が簡単かもしれません。
まず、いくつかのテスト データを設定します。
test <- c("15: .0234 , 12: .0151")
文字列の先頭にある 15 を置き換える例 (^ がこれを行います)。
gsub("^15","x",test)
[1] "x: .0234 , 12: .0151"
文字列の先頭にある数字を置き換える、より一般的な例。
gsub("^([0-9]+)","x",test)
[1] "x: .0234 , 12: .0151"
コロン (:) が後に続く数字を削除し、x とコロンに置き換える例
gsub("([0-9]+):","x:",test)
[1] "x: .0234 , x: .0151"
これはあなたのために働くでしょうか?
(foo <- "15: .0234 , 12: .0151")
# "15: .0234 , 12: .0151"
(bar <- "a: .b , c: .d")
# "a: .b , c: .d"
gsub("^15",bar, foo)
# "a: .b , c: .d: .0234 , 12: .0151"
そうでない場合は、サンプル データと、最終目標を示すサンプル オブジェクトを提供してください。データがどのように見えるかの文字列です。「これらのパターンがネストされているため、最初に出現したものだけを置き換えるように単純に指示してもうまくいきません」という文は、私には少しわかりません。文字列内で '15' を検索したいのですが、小数点で始まる数値の末尾または一部にある場合は検索しませんか?
ヘルプファイルを読みました?gsub
か?