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"
スポンサーリンク