tidyverse – separate関数で列を分割する tidyrパッケージ

tidyverseで1つの列(文字列型)を分割して別の列に分けるには、tidyrパッケージのseparate関数を使います。separate関数は、「指定した列」を「指定した区切り文字」で分割します。Rの標準的な操作strsplit関数を使うと同じような操作が行えます。

列を分割する

書式

separate関数は、第1引数にデータ、第2引数以降に列の分割条件を指定します。「対象となる列名」「分割後の新しい列名(分割数の数分指定する)」「区切り文字」を指定します。尚、パイプ(%>%)を使って連続的に処理を記述する場合は、第1引数のデータは省略することができます。

単純な分割

separate関数に1つの分割条件(文字)を指定して、列を分割しています。指定した分割条件は、「sep = “,”」で、name列が「,」でcolumn1とcolumn2に分割されます。

 1: > library(tidyverse)
 2: 
 3: > my_data <- data.frame(id = c(1,2,3), name=c("A:a,1-10", "B:b,2-10", "C:c,3-10"))
 4: > my_data
 5:   id     name
 6: 1  1 A:a,1-10
 7: 2  2 B:b,2-10
 8: 3  3 C:c,3-10
 9: 
10: > my_data %>% separate(name, c("column1", "column2"), sep=",")
11:   id column1 column2
12: 1  1     A:a    1-10
13: 2  2     B:b    2-10
14: 3  3     C:c    3-10

複数の区切り文字を指定した分割

いずれかの区切り文字で分割

separate関数に複数の分割条件(1文字の集まり)を指定して、列を分割しています。指定した分割条件は、「”[:,]”」で、角括弧([])内のそれぞれの文字が区切り文字になります。今回は、コロン(:)とカンマ(,)で列が分割されました。

1: > my_data %>% separate(name, c("column1", "column2", "column3"), sep="[:,]")
2:   id column1 column2 column3
3: 1  1       A       a    1-10
4: 2  2       B       b    2-10
5: 3  3       C       c    3-10

文字列で分割

separate関数に文字列で分割条件(2文字以上)を指定して、列を分割しています。指定した分割条件は、「”[abc],”」で、「a,」「b,」「c,」が区切り文字(文字列)の条件です。これら組み合わせでできた文字列で、列が分割されました。

1: > my_data %>% separate(name, c("column1", "column2"), sep="[abc],")
2:   id column1 column2
3: 1  1      A:    1-10
4: 2  2      B:    2-10
5: 3  3      C:    3-10

Rの標準的な操作

データフレームの分割したい列を指定し、strsplit関数で分割します(複数の区切り文字を指定可能)。分割後のリスト情報をdo.callで適当な構造に整形し、元のデータフレームと結合しました(行数は同じなので)。結合したデータから、元の列を削除したり、分割で生成された新しい列に名前をつけるなどすると、列の分割操作が行えます。

 1: > my_data <- data.frame(id = c(1,2,3), name=c("A:a,1-10", "B:b,2-10", "C:c,3-10"))
 2: > my_data
 3:   id     name
 4: 1  1 A:a,1-10
 5: 2  2 B:b,2-10
 6: 3  3 C:c,3-10
 7: 
 8: > data.frame(my_data, do.call("rbind", strsplit(as.character(my_data$name), "[-:]")))
 9:   id     name X1  X2 X3
10: 1  1 A:a,1-10  A a,1 10
11: 2  2 B:b,2-10  B b,2 10
12: 3  3 C:c,3-10  C c,3 10

まとめ

  • tidyverseで1つのchracter列を分割して別の列に分けるには、tidyrパッケージのseparate関数を使う。
  • separate関数は、「指定した列」を「指定した区切り文字」で分割できる。分割数に合わせて、分割した際の新しい列名を指定する。
  • Rの標準的な操作strsplit関数を使うと同じような操作が行える。



ピックアップ記事

  1. tidyverse – distinct関数でデータフレームの重複行を削除 dplyrパッケージ

    tidyverseでデータフレームの重複行の削除を行う場合、dplyrパッケージのdistinct…
  2. R plot 重ねる方法3パターン サンプルでわかるRの使い方

    Rでグラフ (plot) を重ねる方法は、「単純な追加」「図に重ねて描画」「濃淡で重なり表現」の3…
  3. awk if サンプルでわかる条件文の書き方 一致・大小比較・正規表現を簡潔に書く方法

    awkのif条件文は、条件によって処理をわけたいときに使います。条件式では、0の判定・関係演算子・…

人気記事

  1. Excel, その他, 統計

    z-score 計算方法 エクセル(Excel) 編
    統計処理で、大きく変化しているなどの判断基準にも使われる値…
  2. IGV, 解析ツール

    IGV 使い方 インストール〜便利な使い方まで | リファレンス・マッピングデータ・アノテーションを読み込んで表示しよう
    IGV(Integrative Genomics View…
  3. R データ型 - 文字列・ベクター・データフレーム・マトリックス など-, R言語, スクリプト

    R subset関数 データフレームやmatrixからの条件指定による行・列の抽出
    R の subset関数は、データフレームやマトリックスか…

おすすめ記事

  1. bash 応用, シェルスクリプト

    シェル スクリプト ファイル存在チェック・空のファイルチェック
    bashでスクリプトを作成するときに、よく使うのがファイル…
  2. R言語, グラフ

    R 使い方 軸・ラベルの調整(向き・サイズ・色など) グラフの描き方
    Rによるplot(グラフ)の描画は、手軽で大変便利です。た…
  3. awk, bash 文字列操作, シェルスクリプト

    bash 部分文字列・置換・長さ・連結・分割の文字列処理
    bashのよく使う文字列処理、部分文字列・置換・連結・長さ…