184  差の計算の課題と解答

library(tidyverse)
{
  set.seed(123456)
  dat <-  tibble(
    id = 1:30,
    tx = sample(c("E","F"),30,replace=TRUE),
    base = runif(30,12,40)
  ) %>% 
    mutate(val = map2(base,tx,~{
      init <- .
      diff <- if(.y=="E"){-2}else{1}
      end <- init + rnorm(1,diff,3)
      
      seq(init,end,length.out=10) +
        c(0,rnorm(8,0,1),0)
    }))
  
  dat <- dat %>% unnest(c(val)) %>% 
    select(id,tx,val)
  
  write_excel_csv(dat,"data/laglead.csv")
}#データ生成の関数

それでは、出題します。

  1. data/laglead.csvというデータを読み込んでください。

  2. 読み込んだデータは、idが個々人を表す数値で、valには、10回測定したBMIの数値が含まれています。この、測定から測定間の差を計算してください

  3. 各々のid毎に、最終測定結果 - 初回測定結果の値をもとめてください。

  4. Txという変数は、その人たちに運動(Exercise)か食事(Food)のどちらにとりくんだかの変数です。EとF、おのおのについて初回と最後の測定の体重の変化量を

利用して

という変数でもとめてみてください。

それでは、動画をとめて、とりくんでみてください。

やってみましたか?

答え合わせをしてみましょう。

  1. data/laglead.csvというデータを読み込んでください。
library(tidyverse)
dat <- read_csv("data/laglead.csv")
Rows: 300 Columns: 3
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (1): tx
dbl (2): id, val

ℹ 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.

2)読み込んだデータは、idが 個々人を表す数値で、valには、 10回測定したBMIの数値が含まれています。 この、測定から測定間の差を計算してください

dat %>% 
  group_by(id) %>% 
  mutate(prev_val = lag(val)) %>% 
  mutate(diff_val = val - prev_val)
# A tibble: 300 × 5
# Groups:   id [30]
      id tx      val prev_val diff_val
   <dbl> <chr> <dbl>    <dbl>    <dbl>
 1     1 F      26.6     NA    NA     
 2     1 F      26.5     26.6  -0.105 
 3     1 F      25.2     26.5  -1.29  
 4     1 F      23.4     25.2  -1.88  
 5     1 F      24.8     23.4   1.44  
 6     1 F      24.9     24.8   0.0940
 7     1 F      27.2     24.9   2.25  
 8     1 F      26.4     27.2  -0.719 
 9     1 F      26.3     26.4  -0.145 
10     1 F      25.1     26.3  -1.22  
# ℹ 290 more rows

これで、diff_valには前回から今回にかけて変化した量が保存されます。

  1. 各々のid毎に、最終測定結果 - 初回測定結果の値をもとめてください。
dat %>% 
  group_by(id) %>% 
  summarise(init = first(val),
            last = last(val)) %>% 
  mutate(l_f = last - init)
# A tibble: 30 × 4
      id  init  last     l_f
   <dbl> <dbl> <dbl>   <dbl>
 1     1  26.6 25.1  -1.57  
 2     2  36.3 34.0  -2.35  
 3     3  18.5 22.7   4.26  
 4     4  15.3  8.86 -6.47  
 5     5  35.1 35.5   0.446 
 6     6  14.2 15.1   0.858 
 7     7  38.7 33.5  -5.19  
 8     8  36.4 36.4  -0.0339
 9     9  31.9 29.3  -2.62  
10    10  29.0 30.7   1.75  
# ℹ 20 more rows
  1. Txという変数は、その人たちに運動(Exercise)か食事(Food)のどちらにとりくんだかの変数です。EとF、おのおのについて初回と最後の測定の体重の変化量を

利用して

という変数でもとめてみてください。

dat %>% 
  group_by(tx,id) %>% 
  summarise(diff = last(val)- first(val)) %>% 
  summarise(
    p_weight = sum(diff < 0)/n(),
    mean_weight = mean(diff)
  )
`summarise()` has grouped output by 'tx'. You can override using the `.groups`
argument.
# A tibble: 2 × 3
  tx    p_weight mean_weight
  <chr>    <dbl>       <dbl>
1 E        0.769     -2.29  
2 F        0.529      0.0607

ということで、txがEの方がBMIが減っている人の割合も大きいし、数値の変化も平均的に2.29減っているということがわかりました。(このデータは、架空のものです)

いかがでしょうか?

集計を利用してこのように、データの変数を加工すること、なんとなくイメージがついたでしょうか?

次の動画では、ここで紹介した方法と組み合わせることが多い、時間のデータを取り扱う方法について簡単に説明してセクションを締めくくろうと思います。