R logo

str_extract(), str_extract_all(), readr::parse_number() は、Rにおける文字列のパターン抽出や数値の抽出に便利な関数です。

以下に、それぞれの関数の使い方、特徴、例を詳しく解説します。


1. str_extract(string, pattern)

単一のマッチを抽出する関数

構文

R
str_extract(string, pattern)

引数

  • string: 文字列または文字のベクトル
  • pattern: 正規表現のパターン

戻り値

  • 最初に一致した文字列を返す(1つだけ)
  • string がベクトルの場合、各要素ごとに最初の一致部分を返す

使用例

1. 最初の一致を抽出

R
library(stringr) str_extract("banana", "na") # 結果: "na" (最初の "na" に一致)

2. ベクトル内のすべての要素に適用

R
strings <- c("apple", "banana", "cherry") str_extract(strings, "a") # 結果: "a" "a" NA (cherry に "a" はない)

3. 数字の抽出

R
str_extract("My age is 25", "\\d+") # 結果: "25" (最初に一致する数字を抽出)

4. 特殊な文字の抽出

R
str_extract("The price is $100.50", "\\$\\d+") # 結果: "$100" (最初の "$100" に一致)

ポイント

  • 最初の1つの一致だけを抽出する
  • もし複数の一致部分がある場合は、最初の1つだけが抽出される

2. str_extract_all(string, pattern)

すべてのマッチを抽出する関数

構文

R
str_extract_all(string, pattern)

引数

  • string: 文字列または文字のベクトル
  • pattern: 正規表現のパターン

戻り値

  • すべての一致部分のリストを返す
  • ベクトルの場合は、各要素の一致部分のリストを返す

使用例

1. すべての一致を抽出

R
str_extract_all("banana", "na") # 結果: list("na", "na") (すべての "na" に一致)

2. ベクトル内のすべての要素に適用

R
strings <- c("apple", "banana", "cherry") str_extract_all(strings, "a") # 結果: list(c("a"), c("a", "a", "a"), character(0))

3. 複数の数字を抽出

R
str_extract_all("My age is 25 and my brother is 30", "\\d+") # 結果: list("25", "30") (すべての数字を抽出)

4. すべての価格の抽出

R
str_extract_all("The prices are $100.50, $200.75, and $300.25", "\\$\\d+\\.\\d+") # 結果: list("$100.50", "$200.75", "$300.25")

ポイント

  • すべての一致部分を抽出する
  • 戻り値はリスト形式(文字列ベクトルではなくリスト)
  • もしリストをフラットにしたい場合は、unlist() を使う
R
prices <- str_extract_all("The prices are $100.50, $200.75, and $300.25", "\\$\\d+\\.\\d+") unlist(prices) # 結果: "$100.50" "$200.75" "$300.25"

3. readr::parse_number()

数値の抽出専用の関数

構文

R
readr::parse_number(string)

引数

  • string: 文字列または文字のベクトル

戻り値

  • 数字が抽出され、数値型 (numeric) のベクトルとして返される

使用例

1. 文字列から数値の抽出

R
library(readr) parse_number("The price is $123.45") # 結果: 123.45 (数値として抽出される)

2. 複数の文字列の数値を抽出

R
prices <- c("Price: $100.50", "Cost: $200.75", "Fee: $300.25") parse_number(prices) # 結果: 100.5 200.75 300.25 (数値型のベクトルとして返される)

3. 数値だけが含まれる場合

R
parse_number("1234") # 結果: 1234

4. 数字がない場合

R
parse_number("No numbers here!") # 結果: NA (一致しない場合はNAが返される)

ポイント

  • 数値を自動的に抽出し、数値型 (numeric) に変換する
  • str_extract()str_extract_all() との違いは、**戻り値が「数値型」**になること
  • 小数点、マイナス記号も自動的に考慮される

まとめ

関数 主な用途 戻り値の型 複数の一致
str_extract() 最初の一致部分を抽出 文字列 1つだけ
str_extract_all() すべての一致部分を抽出 リスト (文字列ベクトル) すべて抽出
readr::parse_number() 数値を抽出し、数値型に変換 数値型 (numeric) 1つだけ (最初の数字)

どの関数を使うべきか?

やりたいこと 推奨する関数 理由
最初のマッチだけが欲しい str_extract() 最初の一致部分だけ抽出
すべてのマッチが欲しい str_extract_all() すべての一致部分をリストで取得
数値だけを抽出して数値型にしたい readr::parse_number() 数値型 (numeric) で取得
ベクトルの各要素から数値を抽出 readr::parse_number() すべての要素を一括処理
価格、重さ、数量を抽出したい readr::parse_number() 価格や重さの数値を数値型で抽出

まとめ

  • str_extract():最初の一致を抽出
  • str_extract_all():すべての一致をリストで取得
  • readr::parse_number():数値型のベクトルを取得(自動で型変換)

これらの関数は、データのクリーニング、数値の抽出、テキスト処理に非常に便利です。