サーチ…


前書き

subgsubはパターンを使用して文字列を編集するために使用されます。 パターンの作成方法については、関連関数と正規表現の詳細についてはパターンマッチングと置換を参照してください。

取得グルー​​プを使用して文字列を並べ替える

文字列の順序を変更する場合は、 pattern内のカッコを使用して文字列の一部をグループ化できます。これらのグループは、 replacement引数で連続した数字を使用してアドレス指定できます。

次の例は、 "姓、姓"の形式の名前のベクトルを "姓の姓"という形式のベクトルに並べ替える方法を示しています。

library(randomNames) 
set.seed(1)

strings <- randomNames(5)
strings
# [1] "Sigg, Zachary"        "Holt, Jake"           "Ortega, Sandra"       "De La Torre, Nichole"
# [5] "Perkins, Donovon"  

sub("^(.+),\\s(.+)$", "\\2 \\1", strings)
# [1] "Zachary Sigg"        "Jake Holt"           "Sandra Ortega"       "Nichole De La Torre"
# [5] "Donovon Perkins"    

姓だけが必要な場合は、最初の括弧のペアを指定することができます。

sub("^(.+),\\s(.+)", "\\1", strings)
# [1] "Sigg"        "Holt"        "Ortega"      "De La Torre" "Perkins"  

重複した連続した要素を削除する

文字列から重複したサブシーケンス要素を削除したいとしましょう(複数の場合があります)。例えば:

2,14,14,14,19

それを以下のように変換します:

2,14,19

gsubを使用して、これを実現できます:

gsub("(\\d+)(,\\1)+","\\1", "2,14,14,14,19")
[1] "2,14,19"

複数の異なる繰り返しにも使用できます。たとえば、次のようになります。

 > gsub("(\\d+)(,\\1)+", "\\1", "2,14,14,14,19,19,20,21")
[1] "2,14,19,20,21"

正規表現について説明しましょう:

  1. (\\d+) :( (\\d+)区切られ、任意の数字(少なくとも1つ)を検出するグループ1。文字変数の場合、バックスラッシュはリテラル文字列区切り文字( \"または\' )の特殊なエスケープ文字を表します。 \d\[0-9]と等価であるため、二重円記号( \\ )を使用する必要があります。
  2. , :句読記号: , (スペースや他の区切り文字を含むことができます)
  3. \\1 :グループ1と同じ文字列、つまり繰り返し番号。それが起こらない場合、パターンは一致しません。

同様の状況を試してみましょう:連続した繰り返し単語を削除する:

one,two,two,three,four,four,five,six

その後、単に置き換える\d\wところ、 \w任意の文字、数字またはアンダースコア:を含む任意の単語文字に一致します。これは[a-zA-Z0-9_]

> gsub("(\\w+)(,\\1)+", "\\1", "one,two,two,three,four,four,five,six")
[1] "one,two,three,four,five,six"
> 

次に、上記のパターンは、特定の場合として重複した数字の場合を含む。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow