【初心者向け:R】列を追加するには?$とmutate()の違いと使い方を徹底解説【tidyverse推奨】

  • URLをコピーしました!

こんにちは。ほしのはやしです。

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という列が一番右に追加されます。

【注意点】
直接df1というテーブルを修正するので、もとデータの損害のリスクが多少あります。

パッケージ(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)

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

df1 %>% mutate(df2)は・・・

df1テーブルにdf2テーブルを追加する(%>% mutate)という意味です!

星柴くん

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()

皆様のお役に立てたなら幸いです。

  • URLをコピーしました!

この記事を書いた人

柴犬をこよなく愛する読書家。
街歩きとお菓子作りを趣味にしています。
研究や論文に役立つ情報をわかりやすくお伝えします。

コメント

コメントする

目次