こんにちは。ほしのはやしです。
Rでデータ分析をしていると、既存のテーブル(data.frameやtibble)に新しい列を追加したい場面は多々ありますよね。
この記事では、基本の$演算子に加えて、tidyverseのmutate()を使った列追加方法をわかりやすく解説します!
もともとのRにある『$』で列を直接追加
まずはコードをお示します。
# 1つ目のテーブル
df1 <- data.frame(name = c("Tom", "Yam"),
score = c(90, 85))
# gradeという新しい列を追加
df1$grade <- c("A", "B")
View(df1)

gradeという列が一番右に追加されます。

パッケージ(tidyverse)を用いた『mutate()』で列を追加
基本の操作
『mutate()』は、『tidyverse』パッケージに含まれるdplyrパッケージの関数で、既存の列に基づいて新しい列を別テーブルからでも作成できます。
行数の一致だけでOKなので、『$』より使い勝手が良いです。
以下がコードのサンプルになります。
install.packages(tidyverse) # 初回のみ
library(tidyverse) # パッケージの呼び出しでRを起動するたびに必要
# 1つ目のテーブル
df1 <- tibble(name = c("Tom", "Yam"),
score = c(90, 85))
# 2つ目のテーブル(別の列を含む)
df2 <- data.frame(height = c(172, 164),
sex = c("Male", "Female"))
# df1の右横にdf2をつなげる
df3 <- df1 %>% mutate(df2)
View(df3)


これらが横につながって・・・


tibbleとdata.frameって出てきたけど何が違うの?



tibble(tidyverseで使える)とdata.frame(デフォルトで搭載)はテーブルを作成するのに使う関数やで!
そんなに大きな違いはないけどな!!



どっち使うか決めてほしいね



特に理由がない限り、tidyverse を利用するのであれば、tibble を使うことが推奨されるで!
他の関数とも相性が良いから、とりあえずtibble使うべし!!
行の数が違う場合は簡単にはできない!
もしdf2の中身が以下のコードのようにdf1と行数が違う場合は、mutate(またはbind_cols())を使うとエラーで結合することができません!
# 1つ目のテーブル
df1 <- tibble(name = c("Tom", "Yam"),
score = c(90, 85))
# 2つ目のテーブル(行数を増やしてみた)
df2 <- data.frame(height = c(172, 164, 182),
sex = c("Male", "Female", "Male"))
# df1の右横にdf2をつなげる
df3 <- df1 %>%
mutate(df2)
View(df3)


もし無理やり行数の違う列をつなげたい場合は、行数を計算してその差分のNAを少ない方のテーブルに補完して、行数を合わせることでできます
まとめ
テーブルの基本操作である列の追加についてご説明しました!
特にtidyverseはテーブル処理で必須のパッケージですので、必ずインストールするのをおすすめします!!
最後に$とmutate()の違いについて表にしました!
項目 | 推奨度 |
---|---|
手軽に1列追加 | $ |
きれいなコード+複数列追加 | mutate() |
皆様のお役に立てたなら幸いです。
コメント