R logo

文字列から一部だけ切り出して、新しい列を作りたい時。

    • 列の追加は dplyrパッケージ: mutate
    • 文字の切り出しは
      • R標準パッケージ: substr  or  substring 
      • stringrパッケージ: str_sub

等を使う。

substr

例えば、下記テーブル "Data" の "Group" 列の左から3番目の文字 "F" or "M" を切り出して、"Sex" という列を新たに作りたい場合。

r-substring-1
mutate(Data, Sex=substring(Group,3,3))

とする。

  • 第1因数:対象文字列
  • 第2因数:開始位置(左から何番目から開始するか)
  • 第3因数:終了位置(左から何番目で終了するか)

※ 1文字目の位置は、他のプログラミング言語では「0」だけど、R言語では見たまま「1」となる。

 

dplyr::select(Data,Sex,everything())

で、"Sex" の列を再左部に持っていくと、目的の列が左側に追加される。

r-substring-2

stringr::str_sub

上記R標準パッケージでもいいけど、文字列操作は Hadley氏作製の stringr パッケージで完結した方が便利。

stringr の特徴
  • 処理速度が速い。
  • 関数が全て "str_" で始まる。
  • パイプ(%>%)で連鎖しやすい。
  • R標準にはない機能も色々追加されている。

例えば、stringr::str_sub だと、"末尾から数えて何番目" などの指定もできる。

stringr パッケージは tidyverse パッケージの中に入っているので、tidyverse をインストールしておけば使える。

install.packages(tidyverse)
library(tidyverse)

 

末尾から数える場合

stringr パッケージの

str_sub

関数を使うと、末尾から数えた部分文字を抽出できる。

 

正の整数で位置を指定すると、"前から数えて何番目" となるけど、"後ろから数えて何番目" と指定したい場合は、負の整数(-1, -2 etc.)を使う。

例えば、下記のようなデータで、

substring-end

"Region" の列に入っている "Cont-Ctx-F1" etc. の文字列を元にして

  • Side: Ipsi or Cont
  • Region: Hipp or Ctx
  • Sex: M or F

のように、3つの列を作りたい場合。

Side

Side は開始位置1, 終了位置4とする。

mutate(Data, Side = str_sub(Region,1,4))

Sex

Sex は、後ろから2番めの記号(F or M)を切り出したいので、開始位置 -2(後ろから数えて2番目), 終了位置 2(後ろから数えて2番目)とする。

mutate(Data, Sex=str_sub(Region,-2,-2)

Region

RegionをCtx/Hippの部分のみにしたい場合、Ctx と Hipp は単語の数が違うから、まず4文字取り出して、その後 "gsub" etc. で "-" を削除する。

Dat <- Dat%>%
substring(Region,6,9)
Dat$Region <- gsub("-","",Dat$Region)
gsub()

の使い方は下記▼

にほんブログ村 子育てブログ ワーキングマザー育児へ