こんにちは。ほしのはやしです。
年齢を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)


もし、列の上書きをしたい場合は、作成したい列名を元の列名と同じにすれば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"))

複数列を元に新しい列を作成
数値の計算
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)
)



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



データ解析にはmutateでいろんな加工するのがオススメやで!
まとめ
テーブルの基本操作である列の加工についてご説明しました!
特にtidyverseはテーブル処理で必須のパッケージですので、必ずインストールするのをおすすめします!!
皆様のお役に立てたなら幸いです。
コメント