京橋のバイオインフォマティシャンの日常

データ分析、コマンドライン、プログラミングについての技術資料・自己アップデート・悩み事などをまとめています。最近、ディープラーニング関連のR言語の資料をまとめるべく注力してます。

【Rでの文字列処理シリーズ(その5)】文字列の抽出/切り出し・検出

Rでの、文字列の抽出/切り出し、検出について、いろいろと試してまとめてみた。 主に、baseやstringrのパッケージを扱った。

関連パッケージをロードする

library(stringr)
library(readr)

文字列の抽出/切り出しについて

stringr::str_extract関数、stringr::str_extract_all関数では、 文字列から一致するパターンを抽出して、ベクトルで結果を返す。

str_extractとstr_extract_allとで、少し挙動が違うみたいである。

以下に、テストデータでの実行例を示す。

#テストデータの読み込んで、unlistにする
Dat <- unlist(data.frame(readr::read_tsv(file="https://raw.githubusercontent.com/kumeS/Blog/master/TXT_proc/test.txt", 
                                         col_names=F, show_col_types = FALSE)),
              use.names = F)

#最初の部分を表示する
Dat
#[1] "abc ABC abc" "ABC abc ABC" "def DEF def" "DEF def DEF" "abc.ABC.abc"
#[6] "ABC.abc.ABC"

#abcが含まれる部分を要素ごとに抽出する
stringr::str_extract(string=Dat, pattern="abc")
#[1] "abc" "abc" NA    NA    "abc" "abc"

#abcが含まれる部分をすべて抽出する
stringr::str_extract_all(string=Dat, pattern="abc")
#[[1]]
#[1] "abc" "abc"
#
#[[2]]
#[1] "abc"
#
#[[3]]
#character(0)
#
#[[4]]
#character(0)
#
#[[5]]
#[1] "abc" "abc"
#
#[[6]]
#[1] "abc"

文字数指定で、文字列を抽出する

base::substrあるいはstringr::str_subを使って、 文字ベクトルの部分文字列を文字数指定で抽出する。

#任意の文字列
Moji <- "abcdefghij"

#文字数のカウント
nchar(Moji)
#[1] 10

#substr関数で、1から3文字目までを抽出する
base::substr(Moji, start=1, stop=3)
#[1] "abc"

#substr関数で、4から6文字目までを抽出する
base::substr(Moji, start=4, stop=6)
#[1] "def"

#次に、str_sub関数で、1から3文字目までを抽出する
stringr::str_sub(Moji, start=1, end=3)
#[1] "abc"

#str_sub関数で、4から6文字目までを抽出する
stringr::str_sub(Moji, start=4, end=6)
#[1] "def"

#str_sub関数で、1文字目から、後ろから3文字目までを抽出する
stringr::str_sub(Moji, start=1, end=-3)
#[1] "abcdefgh"

#str_sub関数で、4文字目から最後の文字までを抽出する
stringr::str_sub(Moji, start=4, end=-1)
#[1] "defghij"

stringr::str_sub関数では、 マイナス付きで、startあるいはendを指定すると、 後ろから何文字目かを指定できる。

文字列の検出

stringr::str_detect関数は、 文字列の中のパターンの有無を検出する。

#そのパターンが含まれるかどうかを、TRUE/FALSEで返す
stringr::str_detect(string=Dat, pattern="abc")
#[1]  TRUE  TRUE FALSE FALSE  TRUE  TRUE

#パターンが含まれた場合には、FALSEで返す (negate = TRUE)
stringr::str_detect(string=Dat, pattern="abc", negate = TRUE)
#[1] FALSE FALSE  TRUE  TRUE FALSE FALSE

参考資料

www.it-swarm.jp.net

stats.biopapyrus.jp

kazutan.github.io

github.com

www.rdocumentation.org

kazutan.github.io

stats.biopapyrus.jp

bioscryptome.t-ohashi.info

www.medi-08-data-06.work

kazutan.github.io

stats.biopapyrus.jp

heavywatal.github.io