R 使い方 文字列処理(文字列検索・文字列置換)

スポンサーリンク



バイオインフォ道場、くまぞうです。

統計ソフトRは、統計処理やグラフの描画でよく用いられます。しかし、色々なことに活用していると、「文字列処理ができると便利だな」と思うことがあります。統計ソフトRには、文字列処理のための便利な関数が準備されているので、代表的な関数についてまとめたいと思います。

文字列分割

strsplit関数で分割します。対象となる文字列と分解パターンを指定します。分割パターンは、文字を直接指定したり、正規表現・文字列クラスなどを指定できます。分割後データはリストで返されます。

空白を文字で指定

パターンを文字列で指定します。

R>
strsplit("bioinfo-dojo kumazou", ' ')
[[1]]
[1] "bioinfo-dojo" "kumazou"

words <- strsplit("bioinfo-dojo kumazou", ' ')
words[[1]][1]  # 分割文字列にアクセス
[1] "bioinfo-dojo"
words[[1]][2]  # 分割文字列にアクセス
[1] "kumazou"

正規表現で指定(半角スペース・タブ・改行など)

パターンを正規表現で指定します。バックスラッシュを2重化します。

R>
strsplit("bioinfo-dojo kumazou", '\\s')
[[1]]
[1] "bioinfo-dojo" "kumazou"

文字列クラスでを指定(半角スペース・タブ・改行など)

パターンを文字列クラスで指定します。括弧([)を2重化します。

R>
strsplit("bioinfo-dojo kumazou", '[[:space:]]')
[[1]]
[1] "bioinfo-dojo" "kumazou"     

組み合わせ

パターンを組み合わせます。OR(|)を使います。

R>
strsplit("bioinfo-dojo kumazou", '[[:punct:]]|[[:space:]]') # スペースを入れない
[[1]]
[1] "bioinfo" "dojo" "kumazou"
R>
strsplit("bioinfo-dojo kumazou", '-| ')
[[1]]
[1] "bioinfo" "dojo" "kumazou"

部分文字列

文字列から部分文字列を取り出すときは、substr関数かsubstring関数を利用します。対象となる文字列と開始位置・終了位置を指定します。文字列置換も可能です。但し、対象となる文字列を一度変数に格納して与える必要があるようです。

部分文字列 抽出

R>
substr("bioinfo-dojo kumazou", 1, 12)
[1] "bioinfo-dojo"

substr(c("bioinfo-dojo1 kumazou", "bioinfo-dojo2 kumazou"), 1, 13)
[1] "bioinfo-dojo1" "bioinfo-dojo2" 

置換

R>
substr(message, 1, 12) <- "Bioinfo-Dojo"
message
[1] "Bioinfo-Dojo kumazou"

message <- "bioinfo-dojo kumazou"
substring(message, 1) <- "bioinfo-dojo-dojo kumazou"
message
[1] "bioinfo-dojo-dojo ku" # 長さに対応した部分のみ置き替えられる

文字列置換

文字列の置換を行う場合、sub関数かgsub関数を利用します。前者は最初に見つかった部分を置換、後者は見つかった部分を全て置換します。

R>
sub('o', 'O', "bioinfo-dojo")
[1] "biOinfo-dojo"
R>
gsub('o', 'O', "bioinfo-dojo")
[1] [1] "biOinfO-dOjO"

文字列検索(マッチ)

文字列のパターンマッチを行う場合、grep関数やmatch関数を利用します。前者は部分文字列の検索、後者は複数パターンを完全一致で検索します。

R>
grep("bio", c("bioinfo-dojo", "dojo", "kumazou"))
[1] 1  # "bio" 1つ目("bioinfo-dojo")でヒット
R>
match(c("bio", "dojo"), c("bioinfo-dojo", "dojo", "kumazou"))
[1] NA  2  # "bio"完全一致はなし、"dojo"2つ目に完全一致

文字列連結

文字列の連結を行う場合、paste関数を利用します。文字列を直接連結する場合、オプションsepに区切り文字を指定します。ベクターで与えられた文字列について、区切り文字を指定して連結する場合は、オプションcollapseを指定します。

R>
paste("aaa", "bbb", "ccc", sep="/")
[1] "aaa/bbb/ccc"

x <- c("aaa", "bbb", "ccc")
paste(x, collapse="/")
[1] "aaa/bbb/ccc"
スポンサーリンク





ピックアップ記事

  1. R plot 重ねる方法3パターン サンプルでわかるRの使い方

    Rでグラフ (plot) を重ねる方法は、「単純な追加」「図に重ねて描画」「濃淡で重なり表現」の3…
  2. awk if サンプルでわかる条件文の書き方 一致・大小比較・正規表現を簡潔に書く方法

    awkのif条件文は、条件によって処理をわけたいときに使います。条件式では、0の判定・関係演算子・…
  3. R subset関数 データフレームやmatrixからの条件指定による行・列の抽出

    R の subset関数は、データフレームやマトリックスから条件にマッチした部分集合を取り出します…

人気記事

  1. Excel, その他, 統計

    z-score 計算方法 エクセル(Excel) 編
    統計処理で、大きく変化しているなどの判断基準にも使われる値…
  2. IGV, 解析ツール

    IGV 使い方 インストール〜便利な使い方まで | リファレンス・マッピングデータ・アノテーションを読み込んで表示しよう
    IGV(Integrative Genomics View…
  3. R データ型 - 文字列・ベクター・データフレーム・マトリックス など-, R言語, スクリプト

    R subset関数 データフレームやmatrixからの条件指定による行・列の抽出
    R の subset関数は、データフレームやマトリックスか…

おすすめ記事

  1. R言語, グラフ

    R 使い方 軸・ラベルの調整(向き・サイズ・色など) グラフの描き方
    Rによるplot(グラフ)の描画は、手軽で大変便利です。た…
  2. awk, bash 文字列操作, シェルスクリプト

    bash 部分文字列・置換・長さ・連結・分割の文字列処理
    bashのよく使う文字列処理、部分文字列・置換・連結・長さ…
  3. bash 応用, シェルスクリプト

    シェル スクリプト ファイル存在チェック・空のファイルチェック
    bashでスクリプトを作成するときに、よく使うのがファイル…