はじめてのtidyr(2):2つの変数の値を1つの変数にまとめる。または逆に分割する
以下のように,名字と名前が別々の変数となっている場合に, フルネームにして1つの変数としてまとめたいという時に役に立つ方法を 解説する。まずはデータの読み込み。
library(tidyverse) dat <- data_frame( family=c("高海","桜内","松浦","黒澤","渡辺","津島","国木田","小原","黒澤"), first=c("千歌","梨子","果南","ダイヤ","曜","善子","花丸","鞠莉","ルビィ") ) dat
# A tibble: 9 × 2 family first <chr> <chr> 1 高海 千歌 2 桜内 梨子 3 松浦 果南 4 黒澤 ダイヤ 5 渡辺 曜 6 津島 善子 7 国木田 花丸 8 小原 鞠莉 9 黒澤 ルビィ
unite()関数で2つの変数の値を1つの変数にまとめる
早速,family
とfirst
をまとめてname
変数を作成する。使うのはtidyr
パッケージの
unite()
関数。なのでヘルプをみたい場合はそちらを参照。
dat %>% unite(name,family,first, sep="")
# A tibble: 9 × 1 name * <chr> 1 高海千歌 2 桜内梨子 3 松浦果南 4 黒澤ダイヤ 5 渡辺曜 6 津島善子 7 国木田花丸 8 小原鞠莉 9 黒澤ルビィ
sep=""
で,接続の部分に何も指定してないので,区切りなしのフルネーム
となった。接続に使う記号は色々指定できる。sep=
自体入れない場合は以下のように
_
でつながれる。こちらは後で使うので,dat2に格納しておく。
dat2 <- dat %>% unite(name,family,first) dat2
# A tibble: 9 × 1 name * <chr> 1 高海_千歌 2 桜内_梨子 3 松浦_果南 4 黒澤_ダイヤ 5 渡辺_曜 6 津島_善子 7 国木田_花丸 8 小原_鞠莉 9 黒澤_ルビィ
元の変数を残したい時は,引数にremove=FALSE
を入れる。
dat %>% unite(name,family,first, remove=FALSE)
name family first * <chr> <chr> <chr> 1 高海_千歌 高海 千歌 2 桜内_梨子 桜内 梨子 3 松浦_果南 松浦 果南 4 黒澤_ダイヤ 黒澤 ダイヤ 5 渡辺_曜 渡辺 曜 6 津島_善子 津島 善子 7 国木田_花丸 国木田 花丸 8 小原_鞠莉 小原 鞠莉 9 黒澤_ルビィ 黒澤 ルビィ
separate()関数で区切りが明記されている1つの変数の値を2つの変数に分割する
こちらはseparate()
関数を使う。先ほど作ったdat2データに適用してみる。
dat2 %>% separate(name, c("family","first"))
# A tibble: 9 × 2 family first * <chr> <chr> 1 高海 千歌 2 桜内 梨子 3 松浦 果南 4 黒澤 ダイヤ 5 渡辺 曜 6 津島 善子 7 国木田 花丸 8 小原 鞠莉 9 黒澤 ルビィ