【初心者向け:R】列を追加・加工するには?mutate()の使い方をわかりやすく解説【tidyverse推奨】

  • URLをコピーしました!

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

年齢を65歳でわけた列を作りたいとか、複数の列の数値を計算してスコアの列を作りたいとか、列を加工する操作は、データ分析において最もよく使われるテクニックの一つですよね。

この記事では、tidyverseのmutate()を使った特定の列の操作方法をわかりやすく解説します!

目次

『mutate()』で列を追加する

まずは以下のコードで練習用のテーブルを作成します!

library(tidyverse)

df <- tibble(
  name = c("Tom", "Yam", "Ken"),
  score = c(80, 90, 70)
)

# スコアを2倍にした列を追加した新しいテーブルdf2を作成する
df2 <- df %>% mutate(score_double = score * 2)

mutate()は、元のデータフレームを壊さずに、新しい列を追加・変更できます!

もし、列の上書きをしたい場合は、作成したい列名を元の列名と同じにすればOKです!

# score列のスコアを2倍にした新しいテーブルdf2を作成する
df2 <- df %>% mutate(score = score * 2)

条件付きで列を追加する(if_else)

scoreが80以上なら”Pass”、それ以外は”Fail”の文字を入れることを考えます。

library(tidyverse)

df <- tibble(
  name = c("Tom", "Yam", "Ken"),
  score = c(80, 90, 70)
)

# スコアを元に条件分けした新しいテーブルdf3を作成する
df3 <- df %>% mutate(pass = if_else(score >= 80, "Pass", "Fail"))

if_else(条件, 真の値, 偽の値)

複数列を元に新しい列を作成

数値の計算

math(数学)とeng(英語)の点の平均点の列(avg)を作成することを考えます。

df <- tibble(
  math = c(70, 90, 80),
  eng  = c(80, 85, 75)
)

# mathとengの平均点の列avgを作成した新しいテーブルdf4を作成する
df4 <- df %>% mutate(avg = (math + eng) / 2)

文字列の結合や変換

名前を結合したfull_nameを作成します。

df <- tibble(first = c("Taro", "Hanako"),
             last  = c("Yamada", "Sato"))

# 名前と苗字を空白で結合したfull_nameという列を作成してdf5というテーブルにする
df5 <- df %>% mutate(full_name = str_c(first, last, sep = " "))

日付の処理

生年月日と検査日のデータから検査時の年齢を計算することを考えます。
日付の処理には『lubridate』というパッケージをインストールして展開しておく必要があります。

library(tidyverse)
library(lubridate)

# サンプルデータとしてtibbleテーブルを作成
patient_data <- tibble(
  patient_id = 1:5,
  birth_date = ymd(c("1990-05-15", "1985-12-20", "2000-03-10", "1978-08-01", "1995-06-25")),
  exam_date = ymd(c("2023-04-28", "2023-04-28", "2023-04-28", "2023-04-28", "2023-04-28"))
)

# mutate()を使って検査時の年齢を計算して新しいテーブルを作成する
patient_data_with_age <- patient_data %>%
  mutate(
    age_at_exam = floor(as.numeric(exam_date - birth_date) / 365.25)
  )

ymd()
ハイフン、スラッシュ、スペースで区切られた “YYYY-MM-DD”、”YYYY/MM/DD”、”YYYY MM DD” などの文字列を日付データに変換します。

もし日付の順序が “月/日/年” (MM/DD/YYYY) であれば mdy()、”日/月/年” (DD/MM/YYYY) であれば dmy() のように、適切な関数を使う必要があります。

floor(…): 小数点以下を切り捨て、整数としての年齢を得ます。

星柴くん

mutate()ってたくさんできることがあるんだね!

黒星柴くん

データ解析にはmutateでいろんな加工するのがオススメやで!

まとめ

テーブルの基本操作である列の加工についてご説明しました!
特にtidyverseはテーブル処理で必須のパッケージですので、必ずインストールするのをおすすめします!!

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

  • URLをコピーしました!

この記事を書いた人

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

コメント

コメントする

目次