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


文字列操作のコマンドと文字列をパターン(キーワード)で検索する”grepコマンド”と置換する”gsubコマンド”を紹介します。

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

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

文字列操作コマンドの紹介

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


#文字列の例、半角空白含めて16文字
#からだにいーもの
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 "
#置換後
[1] " KARXXANI EMONO "

#文字列を指定の長さにする
strtrim(Test, 9)
[1] " KARADANI"

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

###文字列の結合コマンド: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(Text1, Text2, Text3)
[1] "KARADA NI EMONO"
########

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

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

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

#エラーが起きます
Text1 + Text2
Error in Text1 + Text2 :  二項演算子の引数が数値ではありません

#type.convertの使用
type.convert(Text1) + type.convert(Text2)
[1] 3
########

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

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

出力結果は抜粋しています。内容はコメントを確認してください。

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

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

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

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

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

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

#含まれる"の"全てを"が"で置換
gsub("の", "が", Test)
[2] "Rがガイド:研究者も、社会人も、おねえさんも。とりあえず、みんなで使ってみませんか?"                                 
[4] "Rでお遊び:プレゼン資料が配色に使えるかも?キャラクターが髪が色?" 

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

少しでも、あなたのウェブや実験の解析が楽になりますように!!

スポンサードリンク

おすすめコンテンツ


スポンサードリンク