1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rのデータフレーム内で文字列を結合・分解する。列方向(横方向)と行方向(縦方向)。

Last updated at Posted at 2022-08-25

やりたいことは、文字列の結合

こういうデータフレームを、
image.png
こうしたい。行方向(横方向)に文字列を結合して、新しい列を作る。
image.png
または、こうしたい。列方向(縦方向)に文字列を結合。labelをグループとしてlabel2をまとめてます。
image.png

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列→複数列に)

これを
image.png
このように列に分解するなら、
image.png
以下のコードでOK。

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列→複数「行」に)

これを
image.png
このように行に分解するなら、
image.png
以下のコードでOK。

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="_")

おわり

おわりです。お疲れ様でした。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?