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

Rの解析に役に立つ記事
スポンサーリンク

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

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

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

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

スポンサーリンク

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

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

#文字列の例、半角空白含めて16文字
# KARADANI EMONO 
Test <- " KARADANI EMONO "

#&#25991;&#23383;&#25968;&#12434;&#30906;&#35469;
nchar(Test)
[1] 16

#&#21322;&#35282;&#31354;&#30333;&#12434;&#20840;&#12390;&#38500;&#12367;
gsub(" ", "", Test)
[1] "KARADANIEMONO"

#&#20808;&#38957;&#12398;&#21322;&#35282;&#31354;&#30333;&#12434;&#38500;&#12367;
gsub("^ ", "", " KARADANI EMONO ")
[1] "KARADANI EMONO "

#&#26368;&#24460;&#23614;&#12398;&#21322;&#35282;&#31354;&#30333;&#12434;&#38500;&#12367;
gsub(" $", "", " KARADANI EMONO ")
[1] " KARADANI EMONO"

#&#25991;&#23383;&#21015;&#12363;&#12425;&#19968;&#37096;&#12434;&#21462;&#12426;&#20986;&#12377;
#4&#12363;&#12425;11&#25991;&#23383;&#12414;&#12391;&#12434;&#21462;&#12426;&#20986;&#12377;
substring(Test, 4, 11)
[1] "RADANI E"

#&#25991;&#23383;&#21015;&#12398;5&#12392;6&#25991;&#23383;&#30446;&#12434;XX&#12395;&#32622;&#12365;&#25563;&#12360;&#12427;
substring(Test, 5, 6) <- "XX"
#&#32622;&#25563;&#21069;
[1] " KARADANI EMONO "
#&#32622;&#25563;&#24460;
Test
[1] " KARXXANI EMONO "

#&#31354;&#30333;&#12434;&#21547;&#12416;&#25991;&#23383;&#21015;&#12434;&#25351;&#23450;&#12398;&#38263;&#12373;&#12391;&#20999;&#12426;&#20986;&#12377;
strtrim(Test, 9)
[1] " KARADANI"

#&#25991;&#23383;&#12434;&#25351;&#23450;&#12375;&#12383;&#20869;&#23481;&#12391;&#20998;&#21106;
#&#25991;&#23383;A&#12391;&#20998;&#21106;
#&#25351;&#23450;&#12375;&#12383;&#25991;&#23383;&#12399;&#28040;&#12360;&#12390;&#12375;&#12414;&#12375;&#12414;&#12377;
#&#32080;&#26524;&#12399;list&#12394;&#12398;&#12391;unlist&#12391;&#12505;&#12463;&#12488;&#12523;&#12395;&#12375;&#12390;&#12356;&#12414;&#12377;&#12290;
unlist(strsplit(Test, "A"))
[1] " K"        "R"         "D"         "NI EMONO "

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

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

###&#25991;&#23383;&#21015;&#12398;&#32080;&#21512;&#12467;&#12510;&#12531;&#12489;:paste#####
#&#25991;&#23383;&#21015;&#20363;&#12398;&#20316;&#25104;
Text1 <- c("KARADA1", "KARADA2")
Text2 <- " NI "
Text3 <- "EMONO"

#&#21508;&#25991;&#23383;&#21015;&#12398;&#26368;&#24460;&#23614;&#12395;&#21322;&#35282;&#31354;&#30333;&#12364;&#25407;&#20837;&#12373;&#12428;&#32080;&#21512;&#12373;&#12428;&#12414;&#12377;
paste(Text1, Text2, Text3)
[1] "KARADA1  NI  EMONO" "KARADA2  NI  EMONO"

#sep&#12458;&#12503;&#12471;&#12519;&#12531;""&#12391;&#31354;&#30333;&#12434;&#25407;&#20837;&#12379;&#12378;&#12395;&#32080;&#21512;
paste(Text1, Text2, Text3, sep = "")
[1] "KARADA1 NI EMONO" "KARADA2 NI EMONO"

#collapse&#12458;&#12503;&#12471;&#12519;&#12531;&#12399;&#25351;&#23450;&#12375;&#12383;&#25991;&#23383;&#21015;&#12391;
#&#25991;&#23383;&#21015;&#12434;&#32080;&#21512;&#12375;&#12390;&#21336;&#19968;&#12398;&#25991;&#23383;&#21015;&#12434;&#20316;&#25104;&#12375;&#12414;&#12377;
paste(Text1, Text2, Text3, sep = "", collapse = " ? ")
[1] "KARADA1 NI EMONO ? KARADA2 NI EMONO"

#&#12458;&#12503;&#12471;&#12519;&#12531;&#12364;&#12300;sep = ""&#12301;&#23554;&#29992;&#12398;&#12467;&#12510;&#12531;&#12489;:paste0
#&#31354;&#30333;&#12434;&#25407;&#20837;&#12379;&#12378;&#12395;&#32080;&#21512;
paste0(Text1, Text2, Text3)
[1] "KARADA NI EMONO"
########

#&#25991;&#23383;&#21015;&#12505;&#12463;&#12488;&#12523;&#12398;&#20316;&#25104;
TsetChar <- character(10)
TsetChar
[1] "" "" "" "" "" "" "" "" "" ""
class(TsetChar)
[1] "character"

#&#25991;&#23383;&#21015;&#12408;&#12398;&#22793;&#25563;
class(10)
[1] "numeric"
class(as.character(10))
[1] "character"

###&#25968;&#23383;&#12398;&#25991;&#23383;&#21015;&#12434;&#25968;&#23383;&#12395;&#22793;&#25563;:type.convert&#12467;&#12510;&#12531;&#12489;#####
Text1 <- "1"
Text2 <- "2"

#&#12456;&#12521;&#12540;&#12364;&#36215;&#12365;&#12414;&#12377;
Text1 + Text2
Error in Text1 + Text2 : non-numeric argument to binary operator

#type.convert&#12398;&#20351;&#29992;
type.convert(Text1, as.is = TRUE) + type.convert(Text2, as.is = TRUE)
[1] 3
########

#&#12450;&#12523;&#12501;&#12449;&#12505;&#12483;&#12488;&#12434;&#20986;&#21147;&#12377;&#12427;&#38306;&#25968;
#&#22823;&#25991;&#23383;
LETTERS[1:7]
[1] "A" "B" "C" "D" "E" "F" "G"
#&#23567;&#25991;&#23383;
letters[10:16]
[1] "j" "k" "l" "m" "n" "o" "p"

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

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

#&#12363;&#12425;&#12384;&#12395;&#12356;&#12356;&#12418;&#12398;&#12479;&#12452;&#12488;&#12523;
Test <- c("R&#12391;&#35299;&#26512;&#65306;&#12501;&#12457;&#12523;&#12480;&#12398;&#12467;&#12500;&#12540;&#12420;&#20316;&#25104;&#12394;&#12393;&#12300;pathological&#12301;&#12497;&#12483;&#12465;&#12540;&#12472;&#12398;&#32057;&#20171;&#12392;&#12497;&#12483;&#12465;&#12540;&#12472;&#12395;&#20381;&#23384;&#12375;&#12394;&#12356;&#26041;&#27861;",
          "R&#12398;&#12460;&#12452;&#12489;&#65306;&#30740;&#31350;&#32773;&#12418;&#12289;&#31038;&#20250;&#20154;&#12418;&#12289;&#12362;&#12397;&#12360;&#12373;&#12435;&#12418;&#12290;&#12392;&#12426;&#12354;&#12360;&#12378;&#12289;&#12415;&#12435;&#12394;&#12391;&#20351;&#12387;&#12390;&#12415;&#12414;&#12379;&#12435;&#12363;&#65311;",
          "R&#12391;&#35299;&#26512;&#65306;&#30011;&#20687;&#12398;&#12459;&#12521;&#12540;&#12467;&#12540;&#12489;&#12434;&#21462;&#24471;&#12377;&#12427;&#26041;&#27861;&#65281;&#12300;EBImage&#12301;&#12497;&#12483;&#12465;&#12540;&#12472;&#12398;&#32057;&#20171;",
          "R&#12391;&#12362;&#36938;&#12403;&#65306;&#12503;&#12524;&#12476;&#12531;&#36039;&#26009;&#12398;&#37197;&#33394;&#12395;&#20351;&#12360;&#12427;&#12363;&#12418;&#65311;&#12461;&#12515;&#12521;&#12463;&#12479;&#12540;&#12398;&#39658;&#12398;&#33394;&#65311;")

###grep&#12399;&#12461;&#12540;&#12527;&#12540;&#12489;&#12434;&#21547;&#12416;&#25991;&#23383;&#21015;&#12398;&#20301;&#32622;&#12434;&#20986;&#21147;#####
#&#32057;&#20171;&#12434;&#21547;&#12416;&#12479;&#12452;&#12488;&#12523;&#12398;&#38918;&#20301;
grep("&#32057;&#20171;", Test)
[1] 1 3

#grep&#12434;&#21033;&#29992;&#12375;&#12383;&#25991;&#23383;&#21015;&#12398;&#25277;&#20986;&#26041;&#27861;
#&#25991;&#23383;&#21015;&#12395;&#12460;&#12452;&#12489;&#12434;&#21547;&#12416;&#12479;&#12452;&#12488;&#12523;&#12434;&#25277;&#20986;
Test[grep("&#12460;&#12452;&#12489;", Test)]
[1] "R&#12398;&#12460;&#12452;&#12489;&#65306;&#30740;&#31350;&#32773;&#12418;&#12289;&#31038;&#20250;&#20154;&#12418;&#12289;&#12362;&#12397;&#12360;&#12373;&#12435;&#12418;&#12290;&#12392;&#12426;&#12354;&#12360;&#12378;&#12289;&#12415;&#12435;&#12394;&#12391;&#20351;&#12387;&#12390;&#12415;&#12414;&#12379;&#12435;&#12363;&#65311;"

#&#35079;&#25968;&#12398;&#12461;&#12540;&#12527;&#12540;&#12489;&#12418;&#35373;&#23450;&#12391;&#12365;&#12414;&#12377;
#&#20363;&#12399;or"|"&#12391;&#12377;
Test[grep("&#12362;&#12397;&#12360;&#12373;&#12435;|&#39658;", Test)]
[1] "R&#12398;&#12460;&#12452;&#12489;&#65306;&#30740;&#31350;&#32773;&#12418;&#12289;&#31038;&#20250;&#20154;&#12418;&#12289;&#12362;&#12397;&#12360;&#12373;&#12435;&#12418;&#12290;&#12392;&#12426;&#12354;&#12360;&#12378;&#12289;&#12415;&#12435;&#12394;&#12391;&#20351;&#12387;&#12390;&#12415;&#12414;&#12379;&#12435;&#12363;&#65311;"
[2] "R&#12391;&#12362;&#36938;&#12403;&#65306;&#12503;&#12524;&#12476;&#12531;&#36039;&#26009;&#12398;&#37197;&#33394;&#12395;&#20351;&#12360;&#12427;&#12363;&#12418;&#65311;&#12461;&#12515;&#12521;&#12463;&#12479;&#12540;&#12398;&#39658;&#12398;&#33394;&#65311;" 

#&#27491;&#35215;&#34920;&#29694;&#12418;&#20351;&#12360;&#12414;&#12377;
#&#20808;&#38957;(^)&#12395;"R&#12398;"&#12398;&#25991;&#23383;&#12434;&#21547;&#12416;&#12479;&#12452;&#12488;&#12523;
Test[grep("^R&#12398;", Test)]
[1] "R&#12398;&#12460;&#12452;&#12489;&#65306;&#30740;&#31350;&#32773;&#12418;&#12289;&#31038;&#20250;&#20154;&#12418;&#12289;&#12362;&#12397;&#12360;&#12373;&#12435;&#12418;&#12290;&#12392;&#12426;&#12354;&#12360;&#12378;&#12289;&#12415;&#12435;&#12394;&#12391;&#20351;&#12387;&#12390;&#12415;&#12414;&#12379;&#12435;&#12363;&#65311;"
########

###gsub&#12399;&#23550;&#35937;&#12461;&#12540;&#12527;&#12540;&#12489;&#12395;&#35442;&#24403;&#12377;&#12427;&#25991;&#23383;&#21015;&#12434;&#25351;&#23450;&#20869;&#23481;&#12391;&#32622;&#25563;&#12375;&#12414;&#12377;#####
#gsub(&#23550;&#35937;&#12461;&#12540;&#12527;&#12540;&#12489;, &#25351;&#23450;&#20869;&#23481;, &#25991;&#23383;&#21015;)
#&#12362;&#12397;&#12360;&#12373;&#12435;&#12434;&#12362;&#12493;&#12452;&#12469;&#12531;&#12395;&#32622;&#25563;
gsub("&#12362;&#12397;&#12360;&#12373;&#12435;", "&#12362;&#12493;&#12456;&#12469;&#12531;", Test)
[2] "R&#12398;&#12460;&#12452;&#12489;&#65306;&#30740;&#31350;&#32773;&#12418;&#12289;&#31038;&#20250;&#20154;&#12418;&#12289;&#12362;&#12493;&#12456;&#12469;&#12531;&#12418;&#12290;&#12392;&#12426;&#12354;&#12360;&#12378;&#12289;&#12415;&#12435;&#12394;&#12391;&#20351;&#12387;&#12390;&#12415;&#12414;&#12379;&#12435;&#12363;&#65311;"

#&#21547;&#12414;&#12428;&#12427;"&#12398;"&#12434;&#20840;&#12390;"&#12364;"&#12395;&#32622;&#25563;
gsub("&#12398;", "&#12364;", Test)
[1] "R&#12391;&#35299;&#26512;&#65306;&#12501;&#12457;&#12523;&#12480;&#12364;&#12467;&#12500;&#12540;&#12420;&#20316;&#25104;&#12394;&#12393;&#12300;pathological&#12301;&#12497;&#12483;&#12465;&#12540;&#12472;&#12364;&#32057;&#20171;&#12392;&#12497;&#12483;&#12465;&#12540;&#12472;&#12395;&#20381;&#23384;&#12375;&#12394;&#12356;&#26041;&#27861;"
[2] "R&#12364;&#12460;&#12452;&#12489;&#65306;&#30740;&#31350;&#32773;&#12418;&#12289;&#31038;&#20250;&#20154;&#12418;&#12289;&#12362;&#12397;&#12360;&#12373;&#12435;&#12418;&#12290;&#12392;&#12426;&#12354;&#12360;&#12378;&#12289;&#12415;&#12435;&#12394;&#12391;&#20351;&#12387;&#12390;&#12415;&#12414;&#12379;&#12435;&#12363;&#65311;"            
[3] "R&#12391;&#35299;&#26512;&#65306;&#30011;&#20687;&#12364;&#12459;&#12521;&#12540;&#12467;&#12540;&#12489;&#12434;&#21462;&#24471;&#12377;&#12427;&#26041;&#27861;&#65281;&#12300;EBImage&#12301;&#12497;&#12483;&#12465;&#12540;&#12472;&#12364;&#32057;&#20171;"                         
[4] "R&#12391;&#12362;&#36938;&#12403;&#65306;&#12503;&#12524;&#12476;&#12531;&#36039;&#26009;&#12364;&#37197;&#33394;&#12395;&#20351;&#12360;&#12427;&#12363;&#12418;&#65311;&#12461;&#12515;&#12521;&#12463;&#12479;&#12540;&#12364;&#39658;&#12364;&#33394;&#65311;"

#&#26368;&#21021;&#12395;&#29694;&#12428;&#12427;"&#12398;"&#12434;"&#12364;"&#12395;&#32622;&#25563;
sub("&#12398;", "&#12364;", Test)
[1] "R&#12391;&#35299;&#26512;&#65306;&#12501;&#12457;&#12523;&#12480;&#12364;&#12467;&#12500;&#12540;&#12420;&#20316;&#25104;&#12394;&#12393;&#12300;pathological&#12301;&#12497;&#12483;&#12465;&#12540;&#12472;&#12398;&#32057;&#20171;&#12392;&#12497;&#12483;&#12465;&#12540;&#12472;&#12395;&#20381;&#23384;&#12375;&#12394;&#12356;&#26041;&#27861;"
[2] "R&#12364;&#12460;&#12452;&#12489;&#65306;&#30740;&#31350;&#32773;&#12418;&#12289;&#31038;&#20250;&#20154;&#12418;&#12289;&#12362;&#12397;&#12360;&#12373;&#12435;&#12418;&#12290;&#12392;&#12426;&#12354;&#12360;&#12378;&#12289;&#12415;&#12435;&#12394;&#12391;&#20351;&#12387;&#12390;&#12415;&#12414;&#12379;&#12435;&#12363;&#65311;"
[3] "R&#12391;&#35299;&#26512;&#65306;&#30011;&#20687;&#12364;&#12459;&#12521;&#12540;&#12467;&#12540;&#12489;&#12434;&#21462;&#24471;&#12377;&#12427;&#26041;&#27861;&#65281;&#12300;EBImage&#12301;&#12497;&#12483;&#12465;&#12540;&#12472;&#12398;&#32057;&#20171;"
[4] "R&#12391;&#12362;&#36938;&#12403;&#65306;&#12503;&#12524;&#12476;&#12531;&#36039;&#26009;&#12364;&#37197;&#33394;&#12395;&#20351;&#12360;&#12427;&#12363;&#12418;&#65311;&#12461;&#12515;&#12521;&#12463;&#12479;&#12540;&#12398;&#39658;&#12398;&#33394;&#65311;"

正規表現で文字列を抽出

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

Test <- c("KKKRRADAAA GOODDDDDD",
          "kkkrraaadaaaaGoood",
          "&#12363;&#12363;&#12363;&#12425;&#12425;&#12425;&#12384;&#12384;&#12384;&#12356;&#12418;&#12398;&#12398;&#12398;",
          "&#12363;&#12425;&#12384;&#12395;&#12356;&#12356;&#12418;&#12398;")

#+&#12398;&#30452;&#21069;&#25991;&#23383;&#12364;&#65297;&#22238;&#20197;&#19978;&#32368;&#12426;&#36820;&#12377;&#12434;&#25277;&#20986;
Test[grep("&#12425;+", Test)]
[1] "&#12363;&#12363;&#12363;&#12425;&#12425;&#12425;&#12384;&#12384;&#12384;&#12356;&#12418;&#12398;&#12398;&#12398;" "&#12363;&#12425;&#12384;&#12395;&#12356;&#12356;&#12418;&#12398;"  

#&#25991;&#23383;&#12392;[^]&#12398;&#25991;&#23383;&#21015;&#12434;&#21547;&#12414;&#12394;&#12356;&#25991;&#23383;&#21015;&#12434;&#25277;&#20986;
Test[grep("&#12384;[^&#12395;]&#12356;", Test)]
[1] "&#12363;&#12363;&#12363;&#12425;&#12425;&#12425;&#12384;&#12384;&#12384;&#12356;&#12418;&#12398;&#12398;&#12398;"

#&#12354;&#12427;&#25991;&#23383;&#12434;&#21547;&#12416;&#25991;&#23383;&#21015;&#12434;&#25277;&#20986;
Test[grep("A|&#12395;", Test)]
[1] "KKKRRADAAA GOODDDDDD" "&#12363;&#12425;&#12384;&#12395;&#12356;&#12356;&#12418;&#12398;"  

#&#29305;&#23450;&#12497;&#12479;&#12540;&#12531;&#12434;&#25277;&#20986;
Test[grep("&#12425;.&#12395;", Test)]
[1] "&#12363;&#12425;&#12384;&#12395;&#12356;&#12356;&#12418;&#12398;"

#+&#12434;&#32068;&#12415;&#21512;&#12431;&#12379;&#12390;&#29305;&#23450;&#12497;&#12479;&#12540;&#12531;&#12434;&#25277;&#20986;
Test[grep("A.+D", Test)]
[1] "KKKRRADAAA GOODDDDDD"

###&#12371;&#12371;&#12363;&#12425;&#12289;&#20351;&#29992;&#12377;&#12427;&#25991;&#23383;&#12487;&#12540;&#12479;########
Test <- c("karada &#12356;&#12356;&#12418;&#12398;", "karada&#12356;&#12356; &#12418;&#12398;",
          "karada_&#12356;&#12356;&#12418;&#12398;", "&#12363;&#12425;&#12384;&#12395;&#12356;&#12356;&#12418;&#12398;",
          "&#12363;&#12425;&#12384;&#12395;1&#12356;&#12356;&#12418;&#12398;", "&#12363;&#12425;&#12384;&#12395;1223&#12356;&#12418;&#12398;",
          "&#12363;&#12425;&#12384;&#12395;12234535&#12356;&#12356;&#12418;&#12398;", "&#12363;&#12425;&#12384;&#12395;13234535&#12356;&#12356;&#12418;&#12398;",
          "&#12363;&#12425;&#12384;&#12395;13234335&#12356;&#12356;&#12418;&#12398;", "0123-45-6789",
          "012-3456-7895", "0123456789")
########

#&#31354;&#30333;&#12434;&#21547;&#12416;&#25991;&#23383;&#21015;&#12395;&#12510;&#12483;&#12481;
Test[grep("\\s", Test)]
[1] "karada &#12356;&#12356;&#12418;&#12398;" "karada&#12356;&#12356; &#12418;&#12398;"

#&#25968;&#23383;3&#12398;&#21069;&#12395;&#25968;&#23383;&#12364;3&#36899;&#32154;&#12395;&#12510;&#12483;&#12481;
Test[grep("\\d{3}?3", Test)]
[1] "&#12363;&#12425;&#12384;&#12395;1223&#12356;&#12418;&#12398;" "&#12363;&#12425;&#12384;&#12395;12234535&#12356;&#12356;&#12418;&#12398;" "&#12363;&#12425;&#12384;&#12395;13234535&#12356;&#12356;&#12418;&#12398;" "&#12363;&#12425;&#12384;&#12395;13234335&#12356;&#12356;&#12418;&#12398;"
[5] "0123-45-6789" "0123456789" 

#&#25968;&#23383;3&#12364;3&#22238;&#20197;&#19978;&#20986;&#29694;&#12395;&#12510;&#12483;&#12481;
#Test[grep("(3.*){3}", Test)]
Test[grep("(3.*){3,}", Test)]
[1] "&#12363;&#12425;&#12384;&#12395;13234535&#12356;&#12356;&#12418;&#12398;" "&#12363;&#12425;&#12384;&#12395;13234335&#12356;&#12356;&#12418;&#12398;"

#&#25968;&#23383;3&#12364;2&#36899;&#32154;&#20986;&#29694;&#12395;&#12510;&#12483;&#12481;
Test[grep("3{2}", Test)]
[1] "&#12363;&#12425;&#12384;&#12395;13234335&#12356;&#12356;&#12418;&#12398;"

#&#12495;&#12452;&#12501;&#12531;&#12354;&#12426;&#12398;&#25968;&#23383;&#12395;&#12510;&#12483;&#12481;
Test[grep("0\\d{1,4}-\\d{1,4}-\\d{4}", Test)]
[1] "0123-45-6789"  "012-3456-7895"

#&#12300;&#12356;&#12356;&#12301;&#12434;&#21547;&#12416;&#25991;&#23383;&#21015;&#12364;&#12510;&#12483;&#12481;
Test[grep("\\w&#12356;&#12356;", Test)]
[1] "karada&#12356;&#12356; &#12418;&#12398;" "karada_&#12356;&#12356;&#12418;&#12398;" "&#12363;&#12425;&#12384;&#12395;&#12356;&#12356;&#12418;&#12398;" "&#12363;&#12425;&#12384;&#12395;1&#12356;&#12356;&#12418;&#12398;"       
[5] "&#12363;&#12425;&#12384;&#12395;12234535&#12356;&#12356;&#12418;&#12398;" "&#12363;&#12425;&#12384;&#12395;13234535&#12356;&#12356;&#12418;&#12398;" "&#12363;&#12425;&#12384;&#12395;13234335&#12356;&#12356;&#12418;&#12398;"

#&#12300;&#12356;&#12356;&#12301;&#12434;&#21547;&#12414;&#12394;&#12356;&#25991;&#23383;&#21015;&#12364;&#12510;&#12483;&#12481;
Test[grep("(*&#12356;&#12356;)", Test, invert = TRUE)]
[1] "&#12363;&#12425;&#12384;&#12395;1223&#12356;&#12418;&#12398;" "0123-45-6789" "012-3456-7895" "0123456789"

#&#29305;&#27530;&#25991;&#23383;(.&#12394;&#12393;)&#12434;&#12456;&#12473;&#12465;&#12540;&#12503;:\\
grep("&#12356;\\.&#12356;", c("ii", "&#12356;.&#12356;&#12356;", "&#12356;. a", "&#12356;&#12356;&#12356;", "&#12356;&#65305;i", "&#12356;.9i"))
[1] 2

#&#20219;&#24847;&#12398;&#19968;&#25991;&#23383;&#12395;&#12510;&#12483;&#12481;:.
grep("&#12356;.&#12356;", c("ii", "&#12356;.&#12356;&#12356;", "&#12356;. a", "&#12356;&#12356;&#12356;", "&#12356;&#65305;i", "&#12356;9i"))
[1] 2 4

#&#12354;&#12427;&#25991;&#23383;&#12363;&#12425;&#38283;&#22987;&#12377;&#12427;&#25991;&#23383;&#12395;&#12510;&#12483;&#12481;:^,.,*,$&#12398;&#32068;&#12415;&#21512;&#12431;&#12379;
grep("^&#12356;&#12356;.*$", c("ii", "&#12356;.&#12356;&#12356;", "&#12356;. a", "&#12356;&#12356;&#12356;", "&#12356;&#65305;i", "&#12356;9i"))
[1] 4

#&#12354;&#12427;&#25991;&#23383;&#12391;&#32066;&#20102;&#12377;&#12427;&#25991;&#23383;&#12395;&#12510;&#12483;&#12481;:^,.,*,$&#12398;&#32068;&#12415;&#21512;&#12431;&#12379;
grep("^.*&#12356;&#12356;$", c("ii", "&#12356;.&#12356;&#12356;", "&#12356;. a", "&#12356;&#12356;&#12356;", "&#12356;&#65305;i", "&#12356;9i"))
[1] 2 4

#&#33521;&#25968;&#23383;&#12395;&#12510;&#12483;&#12481;:[A-Za-z0-9]
grep("[A-Za-z0-9]", c("ii", "&#12356;.&#12356;&#12356;", "&#12356;. a", "&#12356;&#12356;&#12356;", "&#12356;&#65305;i", "&#12356;9i"))
[1] 1 3 5 6

#&#25968;&#23383;&#12395;&#12510;&#12483;&#12481;:[0-9]
grep("[0-9]", c("ii", "&#12356;.&#12356;&#12356;", "&#12356;. a", "&#12356;&#12356;&#12356;", "&#12356;&#65305;i", "&#12356;9i"))
[1] 6

#&#31354;&#30333;&#12395;&#12510;&#12483;&#12481;:[[:space:]]
grep("[[:space:]]", c("ii", "&#12356;.&#12356;&#12356;", "&#12356;. a", "&#12356;&#12356;&#12356;", "&#12356;&#65305;i", "&#12356;9i"))
[1] 3

#&#12354;&#12427;&#25313;&#24373;&#23376;&#12434;&#21547;&#12416;&#25991;&#23383;&#21015;&#12395;&#12510;&#12483;&#12481;
#&#20363;&#12391;&#12399;word&#12398;.doxc&#12395;&#12510;&#12483;&#12481;
grep("^.*doxc*$", c("ii", "&#12356;.&#12356;&#12356;", "&#12356;.doxc", "&#12356;&#12356;&#12356;", "&#12356;&#65305;i", "&#12356;9i"))
[1] 3

#&#23569;&#25968;&#28857;&#12434;&#21547;&#12416;&#25991;&#23383;&#21015;&#12395;&#12510;&#12483;&#12481;
grep("[+-]?\\d*\\.\\d", c("45454", "-8.0", "8.15452", "7.5", ".23", "&#12356;9i"))
[1] 2 3 4 5

#https/ftp&#12434;&#21547;&#12416;&#25991;&#23383;&#21015;&#12395;&#12510;&#12483;&#12481;
grep("(https?|ftp)://([^:/]+)",
     c("45454", "-8.0",
       "https://www.karada-good.net/analyticsr/r-648/",
       "7.5", ".23", "https://www.karada-good.net/"))
[1] 3 6

文字列のマッチ確認に便利な「stringr::str_view」コマンド

文字列のマッチの確認は「stringr」パッケージの「str_view」コマンドが便利です。なお、「stringr」パッケージは「ggplot2」パッケージなども収録している「tidyverse」パッケージをインストールして利用するのが便利です。

#tidyverse&#12497;&#12483;&#12465;&#12540;&#12472;&#12398;&#35501;&#12415;&#36796;&#12415;
#tidyverse&#12497;&#12483;&#12465;&#12540;&#12472;&#12364;&#12394;&#12369;&#12428;&#12400;&#12452;&#12531;&#12473;&#12488;&#12540;&#12523;
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}

#&#25991;&#23383;&#21015;&#20363;
text <- c("DHA30.0mgEPA100mgARA120mg", "1100mg 400mg",
          "DHA217mgEPA83mg&#35336;300mg", "1&#26085;&#24403;&#12383;&#12426;DHA300mg",
          "DHA880mg&#21512;&#35336;964mgEPA84mg",
          "&#12523;&#12486;&#12452;&#12531;10mg&#12450;&#12473;&#12479;&#12461;&#12469;&#12531;&#12481;&#12531;4mg&#12471;&#12450;&#12491;&#12472;&#12531;-3-&#12464;&#12523;&#12467;&#12471;&#12489;2.3mgDHA50mg")

#&#27491;&#35215;&#34920;&#29694;&#12497;&#12479;&#12540;&#12531;
pattern <- "EPA[0-9.]+mg|DHA[0-9.]+mg|^[0-9.]+mg|\\s[0-9.]+mg"

#&#12510;&#12483;&#12481;&#12398;&#30906;&#35469;:str_view&#12467;&#12510;&#12531;&#12489;
str_view(text, pattern)
[1] &#9474; <DHA30.0mg><EPA100mg>ARA120mg
[2] &#9474; <1100mg>< 400mg>
[3] &#9474; <DHA217mg><EPA83mg>&#35336;300mg
[4] &#9474; 1&#26085;&#24403;&#12383;&#12426;<DHA300mg>
[5] &#9474; <DHA880mg>&#21512;&#35336;964mg<EPA84mg>
[6] &#9474; &#12523;&#12486;&#12452;&#12531;10mg&#12450;&#12473;&#12479;&#12461;&#12469;&#12531;&#12481;&#12531;4mg&#12471;&#12450;&#12491;&#12472;&#12531;-3-&#12464;&#12523;&#12467;&#12471;&#12489;2.3mg<DHA50mg>

###&#21442;&#32771;#####
#text <- c("applebananaorange")
#&#21542;&#23450;&#12398;&#27491;&#35215;&#34920;&#29694;&#12497;&#12479;&#12540;&#12531;
#pattern <- "(?<=^apple).*"
#&#12510;&#12483;&#12481;&#12398;&#30906;&#35469;:str_view&#12467;&#12510;&#12531;&#12489;
#str_view(text, pattern)
#[1] &#9474; apple<bananaorange>

文字列のUnicode正規化

「stringi」パッケージの「stri_trans_general」コマンドを利用すると楽に変換できます。文字の表記ゆれの修正に便利だと思います。

#&#12497;&#12483;&#12465;&#12540;&#12472;&#12398;&#12452;&#12531;&#12473;&#12488;&#12540;&#12523;
install.packages("stringi")

#&#12497;&#12483;&#12465;&#12540;&#12472;&#12398;&#35501;&#12415;&#36796;&#12415;
library("stringi")

#&#25991;&#23383;&#21015;&#20363;
text <- c("&#65357;&#65351;", "mg", "&#12288;", " ", "&alpha;", "&beta;", "&gamma;",
          "&#12290;", ".", "&#65295;", "/", "&#65299;", "3", "A", "a")

#Unicode&#27491;&#35215;&#21270;:NFD,NFC,NFKD,NFKC&#12394;&#12393;&#12364;&#20351;&#29992;&#21487;&#33021;
stri_trans_general(text, "NFKC")
#mg" "mg" " "  " "  "&alpha;" "&beta;" "&gamma;" "&#12290;"
#"."  "/"  "/"  "3"  "3"  "A"  "a" 

#&#12462;&#12522;&#12471;&#12515;&#25991;&#23383;&#12434;&#12521;&#12486;&#12531;&#25991;&#23383;&#12395;&#22793;&#25563;
stri_trans_general(text, "greek-latin")
#"&#65357;&#65351;" "mg"   "&#12288;"   " "    "a"    "b"    "g" 
#"&#12290;"   "."    "&#65295;"   "/"    "&#65299;"  
#"3"    "A"    "a" 

#&#22823;&#25991;&#23383;&#12434;&#23567;&#25991;&#23383;&#12395;&#22793;&#25563;
#&#36870;&#12398;&#22580;&#21512;&#12399;"upper"&#12434;&#20837;&#21147;&#12377;&#12427;
stri_trans_general(text, "lower")
#"&#65357;&#65351;" "mg"   "&#12288;"   " "    "&alpha;"   "&beta;"   "&gamma;" 
#"&#12290;"   "."    "&#65295;"   "/"    "&#65299;"  
#"3"    "a"    "a"   

役に立つ記事の紹介


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

タイトルとURLをコピーしました