Rで解析:文字列操作と検索「grep」と置換「gsub」コマンドの紹介


文字列操作のコマンドと文字列をパターン(キーワード)で検索する”grepコマンド”と置換する”gsubコマンド”を紹介します。正規表現での抽出も簡単に紹介します。

grepコマンドを使うことでデータの項目名などで繰り返しの処理ができます。
Rとウェブ解析:データフレームの項目名で処理を繰り返す

文字の置換に役に立つかもしれない記事の紹介です。
・Rで解析:文字操作が楽々「stringr」パッケージ
https://www.karada-good.net/analyticsr/r-640

コマンドはR version 4.1.2で確認しています。

文字列の置き換えなどのコマンド

空白を含む文字数のカウント、空白の削除、文字列の置き換え、文字列の切り出しに関するコマンドです。

<pre class="wp-block-syntaxhighlighter-code">#文字列の例、半角空白含めて16文字
# KARADANI EMONO 
Test <- " KARADANI EMONO "

#文字数を確認
nchar(Test)
[1] 16

#半角空白を全て除く
gsub(" ", "", Test)
[1] "KARADANIEMONO"

#先頭の半角空白を除く
gsub("^ ", "", " KARADANI EMONO ")
[1] "KARADANI EMONO "

#最後尾の半角空白を除く
gsub(" $", "", " KARADANI EMONO ")
[1] " KARADANI EMONO"

#文字列から一部を取り出す
#4から11文字までを取り出す
substring(Test, 4, 11)
[1] "RADANI E"

#文字列の5と6文字目をXXに置き換える
substring(Test, 5, 6) <- "XX"
#置換前
[1] " KARADANI EMONO "
#置換後
Test
[1] " KARXXANI EMONO "

#空白を含む文字列を指定の長さで切り出す
strtrim(Test, 9)
[1] " KARADANI"

#文字を指定した内容で分割
#文字Aで分割
#指定した文字は消えてしまします
#結果はlistなのでunlistでベクトルにしています。
unlist(strsplit(Test, "A"))
[1] " K"        "R"         "D"         "NI EMONO "</pre>

文字列の結合などのコマンド

文字列の結合、文字列ベクトルの作成、文字列の数字化などのコマンド

<pre class="wp-block-syntaxhighlighter-code">###文字列の結合コマンド:paste#####
#文字列例の作成
Text1 <- c("KARADA1", "KARADA2")
Text2 <- " NI "
Text3 <- "EMONO"

#各文字列の最後尾に半角空白が挿入され結合されます
paste(Text1, Text2, Text3)
[1] "KARADA1  NI  EMONO" "KARADA2  NI  EMONO"

#sepオプション""で空白を挿入せずに結合
paste(Text1, Text2, Text3, sep = "")
[1] "KARADA1 NI EMONO" "KARADA2 NI EMONO"

#collapseオプションは指定した文字列で
#文字列を結合して単一の文字列を作成します
paste(Text1, Text2, Text3, sep = "", collapse = " ? ")
[1] "KARADA1 NI EMONO ? KARADA2 NI EMONO"

#オプションが「sep = ""」専用のコマンド:paste0
#空白を挿入せずに結合
paste0(Text1, Text2, Text3)
[1] "KARADA NI EMONO"
########

#文字列ベクトルの作成
TsetChar <- character(10)
TsetChar
[1] "" "" "" "" "" "" "" "" "" ""
class(TsetChar)
[1] "character"

#文字列への変換
class(10)
[1] "numeric"
class(as.character(10))
[1] "character"

###数字の文字列を数字に変換:type.convertコマンド#####
Text1 <- "1"
Text2 <- "2"

#エラーが起きます
Text1 + Text2
Error in Text1 + Text2 : non-numeric argument to binary operator

#type.convertの使用
type.convert(Text1, as.is = TRUE) + type.convert(Text2, as.is = TRUE)
[1] 3
########

#アルファベットを出力する関数
#大文字
LETTERS[1:7]
[1] "A" "B" "C" "D" "E" "F" "G"
#小文字
letters[10:16]
[1] "j" "k" "l" "m" "n" "o" "p"</pre>

検索する”grepコマンド”と置換する”gsubコマンド”

内容はコメントを確認してください。

<pre class="wp-block-syntaxhighlighter-code">#からだにいいものタイトル
Test <- c("Rで解析:フォルダのコピーや作成など「pathological」パッケージの紹介とパッケージに依存しない方法",
          "Rのガイド:研究者も、社会人も、おねえさんも。とりあえず、みんなで使ってみませんか?",
          "Rで解析:画像のカラーコードを取得する方法!「EBImage」パッケージの紹介",
          "Rでお遊び:プレゼン資料の配色に使えるかも?キャラクターの髪の色?")

###grepはキーワードを含む文字列の位置を出力#####
#紹介を含むタイトルの順位
grep("紹介", Test)
[1] 1 3

#grepを利用した文字列の抽出方法
#文字列にガイドを含むタイトルを抽出
Test[grep("ガイド", Test)]
[1] "Rのガイド:研究者も、社会人も、おねえさんも。とりあえず、みんなで使ってみませんか?"

#複数のキーワードも設定できます
#例はor"|"です
Test[grep("おねえさん|髪", Test)]
[1] "Rのガイド:研究者も、社会人も、おねえさんも。とりあえず、みんなで使ってみませんか?"
[2] "Rでお遊び:プレゼン資料の配色に使えるかも?キャラクターの髪の色?" 

#正規表現も使えます
#先頭(^)に"Rの"の文字を含むタイトル
Test[grep("^Rの", Test)]
[1] "Rのガイド:研究者も、社会人も、おねえさんも。とりあえず、みんなで使ってみませんか?"
########

###gsubは対象キーワードに該当する文字列を指定内容で置換します#####
#gsub(対象キーワード, 指定内容, 文字列)
#おねえさんをおネイサンに置換
gsub("おねえさん", "おネエサン", Test)
[2] "Rのガイド:研究者も、社会人も、おネエサンも。とりあえず、みんなで使ってみませんか?"

#含まれる"の"を全て"が"に置換
gsub("の", "が", Test)
[1] "Rで解析:フォルダがコピーや作成など「pathological」パッケージが紹介とパッケージに依存しない方法"
[2] "Rがガイド:研究者も、社会人も、おねえさんも。とりあえず、みんなで使ってみませんか?"            
[3] "Rで解析:画像がカラーコードを取得する方法!「EBImage」パッケージが紹介"                         
[4] "Rでお遊び:プレゼン資料が配色に使えるかも?キャラクターが髪が色?"

#最初に現れる"の"を"が"に置換
sub("の", "が", Test)
[1] "Rで解析:フォルダがコピーや作成など「pathological」パッケージの紹介とパッケージに依存しない方法"
[2] "Rがガイド:研究者も、社会人も、おねえさんも。とりあえず、みんなで使ってみませんか?"
[3] "Rで解析:画像がカラーコードを取得する方法!「EBImage」パッケージの紹介"
[4] "Rでお遊び:プレゼン資料が配色に使えるかも?キャラクターの髪の色?"</pre>

正規表現で文字列を抽出

正規表現でを使用した文字列の抽出例です。

<pre class="wp-block-syntaxhighlighter-code">Test <- c("KKKRRADAAA GOODDDDDD",
          "kkkrraaadaaaaGoood",
          "かかからららだだだいもののの",
          "からだにいいもの")

#+の直前文字が1回以上繰り返すを抽出
Test[grep("ら+", Test)]
[1] "かかからららだだだいもののの" "からだにいいもの"  

#文字と[^]の文字列を含まない文字列を抽出
Test[grep("だ[^に]い", Test)]
[1] "かかからららだだだいもののの"

#ある文字を含む文字列を抽出
Test[grep("A|に", Test)]
[1] "KKKRRADAAA GOODDDDDD" "からだにいいもの"  

#特定パターンを抽出
Test[grep("ら.に", Test)]
[1] "からだにいいもの"

#+を組み合わせて特定パターンを抽出
Test[grep("A.+D", Test)]
[1] "KKKRRADAAA GOODDDDDD"

#特定の文字列の出現数で抽出
#{最低連続数,最高連続数}で指定
Test[grep("a{4,}", Test)]
[1] "kkkrraaadaaaaGoood"

#ある文字の出現数で抽出
#{最低連続数,最高連続数}で指定
Test[grep("(ら|a){2,}", Test)]
[1] "kkkrraaadaaaaGoood" "かかからららだだだいもののの"</pre>

少しでも、あなたの解析が楽になりますように!!

スポンサードリンク

関連コンテンツ


スポンサードリンク