やりたいことは、文字列の結合
こういうデータフレームを、
こうしたい。行方向(横方向)に文字列を結合して、新しい列を作る。
または、こうしたい。列方向(縦方向)に文字列を結合。labelをグループとしてlabel2をまとめてます。
Rのコード
以下のコードで、上の変形ができます。
library(dplyr)
library(tidyr)
#サンプルデータを作る
sample <- data.frame(
id=1:6
,label=c("aaa","aaa","bbb","bbb","ccc","ccc")
,label2=c("あああ","いいい","ううう","えええ","おおお","かかか")
)
#行方向(横方向)に文字列を結合。uniteを使用。mutateとpasteでもできるけどuniteのほうが簡単。
#結合に使った列を消すなら、remove=T。結合に使う文字はsepで指定。
sample_col <- sample %>% unite(new_label,label,label2,remove=F,sep="_")
# 列方向(縦方向)に文字列を結合。
# group_byしてからsummariseの中でpaste0を使う。結合に使う文字はcollapseで指定。
sample_row <- sample %>% group_by(label) %>%
summarise(new_label = paste0(label2,collapse="-"))
分解もしたい(1列→複数列に)
library(tidyr)
# サンプルデータを作成
sample <- data.frame(
id=1:6
,label=c("aaa_あああ","aaa_いいい","bbb_ううう","bbb_えええ","ccc_おおお","ccc_かかか")
)
# separateを使用。分解の区切り文字はsepで指定。分解後の列名はintoで指定。intoの数が合わない分は消えちゃいます。
sample_col <- sample %>% separate(label,into=c("new_label1","new_label2"),sep="_")
分解もしたい(1列→複数「行」に)
library(tidyr)
# サンプルデータを作成
sample <- data.frame(
id=1:6
,label=c("aaa_あああ","aaa_いいい","bbb_ううう","bbb_えええ","ccc_おおお","ccc_かかか")
)
# separate_rowsを使用。分解に使う区切り文字はsepで指定。
sample_row <- sample %>% separate_rows(label,sep="_")
おわり
おわりです。お疲れ様でした。