R Language
代入で文字列を変更する
サーチ…
前書き
sub
とgsub
はパターンを使用して文字列を編集するために使用されます。 パターンの作成方法については、関連関数と正規表現の詳細についてはパターンマッチングと置換を参照してください。
取得グループを使用して文字列を並べ替える
文字列の順序を変更する場合は、 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"
正規表現について説明しましょう:
-
(\\d+)
:((\\d+)
区切られ、任意の数字(少なくとも1つ)を検出するグループ1。文字変数の場合、バックスラッシュはリテラル文字列区切り文字(\"
または\'
)の特殊なエスケープ文字を表します。\d\
は[0-9]
と等価であるため、二重円記号(\\
)を使用する必要があります。 -
,
:句読記号:,
(スペースや他の区切り文字を含むことができます) -
\\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