r 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関数を使うと同じような操作が行える。

論文・データ解析の支援

とにかく早く問題解決したい人はこちら>>直接、データ解析相談
とにかく早く問題解決したい人はこちら>>こちらで論文相談

関連記事

スポンサーリンク
r tidyverse 使い方 | 行 グループ毎の処理 group_by関数 - dplyrパッケージ
tidyverseでデータフレームをグループ別に処理する場合、dplyrパッケージのgroup_by関数を使います。group_by関数以降の処理では、グループ毎に計算が行われます。Rの標準的な操作なら、apply系関数を使って同じような処...
r tidyverse 使い方 | データフレーム重複行を削除 distinct関数 - dplyrパッケージ
tidyverseでデータフレームの重複行の削除を行う場合、dplyrパッケージのdistinct関数を使います。重複をチェックする列名を指定し、重複が見つかった行は最初に見つかったデータを残して、それ以外は削除されます。Rの標準的な操作な...
r tidyverse 使い方 | 列の追加 mutate関数 - dplyrパッケージ
tidyverseでデータフレームに列を追加する場合は、dplyrパッケージのmutate関数を使います。新しい列を追加したり、既にある列に上書きすることができます。また、transmutateという関数を使った場合は、列を追加しつつ、se...
r tidyverse 使い方 | 行のソート arrange関数 - dplyrパッケージ
tidyverseで1つのデータフレームに対する行のソートは、dplyrパッケージのarrange関数を使います。arrange関数は、データフレームの行をソートする関数です。エクセルの行の並べ替えのように、優先度の高いものから複数の条件を...
r tidyverse 使い方 | 2つのデータフレーム結合 inner_join関数 - dplyrパッケージ
tidyverseで2つのデータフレームの結合は、dplyrパッケージのjoin系関数を使います。キーが共通する部分を結合するinner_join関数がよく使われます。2つのデータフレームの結合条件によって、その他のjoin系関数を使い分け...
dplyr filter関数で行の絞り込み | r tidyverse 使い方
dplyrパッケージのfilter関数をつかえば、データフレームの行の絞り込みができます。指定した条件を満たす行を絞り込みます。複数の条件を指定した場合、全ての条件を満たす行に絞りこまれます。 条件式では、論理演算&(AND)や、|(OR)...
r tidyverse 使い方 | 列 filter 絞り込み select関数 - dplyrパッケージ
tidyverseで1つのデータフレームの列の絞り込みは、dplyrパッケージのselect関数を使います。selectは条件を満たす列を絞り込む関数です。様々な指定方法で絞り込みができます。列名と文字列条件のマッチや正規表現を利用した絞り...
tidyverse csv・tsvのファイルの読み方・データ型の指定方法 readrパッケージ
tidyverseを使う場合、ファイルの読み書きにはreadrパッケージの専用関数(read_tsv関数・read_csv関数)を使うのが便利です。これらの専用関数ではデータ・フレーム構造より使いやすいtibble型でデータを読み込みますが...
tidyverse インストールとロード tidyverseの主なパッケージ
tidyverseはRのパッケージの1つで、データ操作(抽出・連結など)を統合的に扱うためのツール群です。Rを起動後に、tidyverseのインストールを行います。インストール完了後は、使うときにパッケージをロードして使います。 とにかく早...
タイトルとURLをコピーしました