89  mutate()の練習問題

課題1:

配布したフォルダに含まれる、“data/practive1.csv”をインポートして利用してください。(インポートするところからが練習問題です)

インポートすると、id,height(身長[cm]),weight(体重[kg])という列名を持つ表となっているはずです。

課題2

身長をcm単位のデータからm単位のデータにして、height_mという列名に入れてください。。(例えば、121[cm]であれば、100でわると、1.21[m]と、メートル単位になります。Rでは割り算は 121/100のように表します。)

課題3

height_mを二乗して、hm_squaredという名前の列を作成してください。

課題4

weightとhm_squaredからBMI(body mass index)を計算して、bmi1という列名に保存しください。BMIの計算式は、体重[kg] ÷ (身長[m] * 身長[m])です。

課題5

weightとheightからBMIを計算して、bmi2という列名に保存してください。

それでは、動画をとめてどうぞ:

できましたか?

library(tidyverse)

課題1:解答

“data/practice1.csv”をインポートする

dat <- read_csv("data/practice1.csv")
Rows: 10 Columns: 3
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
dbl (3): id, height, weight

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
dat
# A tibble: 10 × 3
      id height weight
   <dbl>  <dbl>  <dbl>
 1     1   138.   60.5
 2     2   153.   50.0
 3     3   161.   54.5
 4     4   127.   71.3
 5     5   154.   89.2
 6     6   155.   67.8
 7     7   144.   59.8
 8     8   145.   51.8
 9     9   144.   53.3
10    10   141.  118. 

課題2

身長をcm単位のデータからm単位のデータにして、height_mという列名に入れてください。

dat2 <- dat %>% 
  mutate(height_m = height/100)
dat2
# A tibble: 10 × 4
      id height weight height_m
   <dbl>  <dbl>  <dbl>    <dbl>
 1     1   138.   60.5     1.38
 2     2   153.   50.0     1.53
 3     3   161.   54.5     1.61
 4     4   127.   71.3     1.27
 5     5   154.   89.2     1.54
 6     6   155.   67.8     1.55
 7     7   144.   59.8     1.44
 8     8   145.   51.8     1.45
 9     9   144.   53.3     1.44
10    10   141.  118.      1.41

課題3

height_mを二乗して、hm_squaredという名前の列を作成してください。

dat3 <- dat2 %>% 
  mutate(hm_squared = height_m * height_m)

dat3
# A tibble: 10 × 5
      id height weight height_m hm_squared
   <dbl>  <dbl>  <dbl>    <dbl>      <dbl>
 1     1   138.   60.5     1.38       1.90
 2     2   153.   50.0     1.53       2.33
 3     3   161.   54.5     1.61       2.59
 4     4   127.   71.3     1.27       1.60
 5     5   154.   89.2     1.54       2.38
 6     6   155.   67.8     1.55       2.40
 7     7   144.   59.8     1.44       2.08
 8     8   145.   51.8     1.45       2.09
 9     9   144.   53.3     1.44       2.08
10    10   141.  118.      1.41       1.99

あるいは、

dat3 <- dat2 %>% 
  mutate(hm_squared = height_m^2)

dat3
# A tibble: 10 × 5
      id height weight height_m hm_squared
   <dbl>  <dbl>  <dbl>    <dbl>      <dbl>
 1     1   138.   60.5     1.38       1.90
 2     2   153.   50.0     1.53       2.33
 3     3   161.   54.5     1.61       2.59
 4     4   127.   71.3     1.27       1.60
 5     5   154.   89.2     1.54       2.38
 6     6   155.   67.8     1.55       2.40
 7     7   144.   59.8     1.44       2.08
 8     8   145.   51.8     1.45       2.09
 9     9   144.   53.3     1.44       2.08
10    10   141.  118.      1.41       1.99

A^xでAのx乗という意味になります。

課題4

weightとhm_squaredからBMI(body mass index)を計算して、bmi1という列名に保存しください。

dat4 <- dat3 %>% 
  mutate(bmi1 = weight/hm_squared)
dat4
# A tibble: 10 × 6
      id height weight height_m hm_squared  bmi1
   <dbl>  <dbl>  <dbl>    <dbl>      <dbl> <dbl>
 1     1   138.   60.5     1.38       1.90  31.8
 2     2   153.   50.0     1.53       2.33  21.4
 3     3   161.   54.5     1.61       2.59  21.1
 4     4   127.   71.3     1.27       1.60  44.5
 5     5   154.   89.2     1.54       2.38  37.5
 6     6   155.   67.8     1.55       2.40  28.2
 7     7   144.   59.8     1.44       2.08  28.7
 8     8   145.   51.8     1.45       2.09  24.8
 9     9   144.   53.3     1.44       2.08  25.6
10    10   141.  118.      1.41       1.99  59.4

課題5

weightとheightからBMIを計算して、bmi2という列名に保存してください。

dat5 <- dat4 %>% 
  mutate(bmi2 = weight/((height/100)^2))

dat5
# A tibble: 10 × 7
      id height weight height_m hm_squared  bmi1  bmi2
   <dbl>  <dbl>  <dbl>    <dbl>      <dbl> <dbl> <dbl>
 1     1   138.   60.5     1.38       1.90  31.8  31.8
 2     2   153.   50.0     1.53       2.33  21.4  21.4
 3     3   161.   54.5     1.61       2.59  21.1  21.1
 4     4   127.   71.3     1.27       1.60  44.5  44.5
 5     5   154.   89.2     1.54       2.38  37.5  37.5
 6     6   155.   67.8     1.55       2.40  28.2  28.2
 7     7   144.   59.8     1.44       2.08  28.7  28.7
 8     8   145.   51.8     1.45       2.09  24.8  24.8
 9     9   144.   53.3     1.44       2.08  25.6  25.6
10    10   141.  118.      1.41       1.99  59.4  59.4

一致していましたか?

bmi1の手順、mutate関数1個で書くのであれば、

dat
# A tibble: 10 × 3
      id height weight
   <dbl>  <dbl>  <dbl>
 1     1   138.   60.5
 2     2   153.   50.0
 3     3   161.   54.5
 4     4   127.   71.3
 5     5   154.   89.2
 6     6   155.   67.8
 7     7   144.   59.8
 8     8   145.   51.8
 9     9   144.   53.3
10    10   141.  118. 
dat %>% 
  mutate(
    height_m = height/100,
    hm_squared = height_m^2,
    bmi1 = weight/hm_squared
  )
# A tibble: 10 × 6
      id height weight height_m hm_squared  bmi1
   <dbl>  <dbl>  <dbl>    <dbl>      <dbl> <dbl>
 1     1   138.   60.5     1.38       1.90  31.8
 2     2   153.   50.0     1.53       2.33  21.4
 3     3   161.   54.5     1.61       2.59  21.1
 4     4   127.   71.3     1.27       1.60  44.5
 5     5   154.   89.2     1.54       2.38  37.5
 6     6   155.   67.8     1.55       2.40  28.2
 7     7   144.   59.8     1.44       2.08  28.7
 8     8   145.   51.8     1.45       2.09  24.8
 9     9   144.   53.3     1.44       2.08  25.6
10    10   141.  118.      1.41       1.99  59.4

と書くこともできますし、パイプをつなげて書くのであれば、

dat %>% 
  mutate(height_m = height/100) %>% 
  mutate(hm_squared = height_m^2) %>% 
  mutate(bmi1 = weight/hm_squared)
# A tibble: 10 × 6
      id height weight height_m hm_squared  bmi1
   <dbl>  <dbl>  <dbl>    <dbl>      <dbl> <dbl>
 1     1   138.   60.5     1.38       1.90  31.8
 2     2   153.   50.0     1.53       2.33  21.4
 3     3   161.   54.5     1.61       2.59  21.1
 4     4   127.   71.3     1.27       1.60  44.5
 5     5   154.   89.2     1.54       2.38  37.5
 6     6   155.   67.8     1.55       2.40  28.2
 7     7   144.   59.8     1.44       2.08  28.7
 8     8   145.   51.8     1.45       2.09  24.8
 9     9   144.   53.3     1.44       2.08  25.6
10    10   141.  118.      1.41       1.99  59.4

と書いてもOKです。

(個人的にはmutate関数毎の変数作成する癖がありますが、これは好き好きでよいと思います。)

以上、mutate関数の説明でした。次は変数名を操作する関数をご紹介していきます