grepl を使用して、R 文字ベクトル内の任意の文字列に一致するものを検索する
胡金庫
2023年1月30日
この記事では、grepl
を使用して R 文字ベクトル内の任意の文字列に一致するものを見つけるいくつかの方法について説明します。
R で grep
または grepl
関数を使用してパターン一致を検索する
grep
は、文字ベクトルのパターンマッチングに使用されます。パターン引数を正規表現として受け取り、それに応じて関数と照合されます。grep
はデフォルトで一致した要素のインデックスのベクトルを返しますが、ユーザーが value
パラメータに TRUE
を割り当てた場合、一致した要素の文字ベクトルを返すこともできます。一方、grepl
は、対応する要素がパターンに一致するかどうかを示すブール値のベクトルを返します。次の例は、任意のアルファベットと一致するアルファベットを示しており、期待どおりにすべての要素の一致結果が得られます。
grep("[a-z]", letters)
grep("[a-z]", letters, value = TRUE)
grepl("[a-z]", letters)
> grep("[a-z]", letters)
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
> grep("[a-z]", letters, value = TRUE)
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v"
[23] "w" "x" "y" "z"
> grepl("[a-z]", letters)
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[18] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
grepl
を使用して、R 文字ベクトル内の任意の文字列に一致させる
grepl
関数は、対応するパターンで提供される文字列の任意の論理順列に一致させることができます。grepl
はデフォルトでは異なる大文字と一致しないことに注意してください。次のコードスニペットは、The
が見つかったすべての文字列に一致する最初の関数を示しています。一方、grepl
への次の呼び出しは、The
または the
のいずれかを含む単語に一致します。
words <- c("The", "licenses", "for", "most", "software", "are",
"to", "share", "and", "change", "it.",
"", "By", "contrast,", "the", "GNU", "General", "Public", "License",
"free", "for", "all", "its", "users")
i <- grepl("The", words)
i
i <- grepl("The|the", words)
i
[1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[15] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[15] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
または、次のコードサンプルに示すように、if...else
関数を使用して、文字ベクトル内の一致または不一致の各要素の文字列値を出力することもできます。2 番目の呼び出しでは、e-h
範囲の文字を含む任意の文字列との照合が使用されることに注意してください。
words <- c("The", "Them", "for", "most", "software", "are",
"to", "share", "and", "change", "it.",
"", "By", "contrast,", "the", "GNU", "General", "Public", "License",
"free", "for", "all", "its", "users")
i <- ifelse(grepl("The|the", words), "Tr", "Fa")
i <- ifelse(grepl("[e-h]", words), "Tr", "Fa")
i
[1] "Tr" "Tr" "Fa" "Fa" "Fa" "Fa" "Fa" "Fa" "Fa" "Fa" "Fa" "Fa" "Fa" "Fa" "Tr" "Fa" "Fa"
[18] "Fa" "Fa" "Fa" "Fa" "Fa" "Fa" "Fa"
[1] "Tr" "Tr" "Tr" "Fa" "Tr" "Tr" "Fa" "Tr" "Fa" "Tr" "Fa" "Fa" "Fa" "Fa" "Tr" "Fa" "Tr"
[18] "Fa" "Tr" "Tr" "Tr" "Fa" "Fa" "Tr"