171  全体集計の課題(tidyverse)

library(tidyverse)

まずは、スライドで表示していたデータを作成しましょう

id <- 1:15
age <- c(30,40,65,34,86,43,64,26,87,45,76,24,97,45,34)
gender <- c("m","m","f","f","f","m","m","f","f","m","f","f","m","m","m")
isx <- c(F,T,F,F,T,T,T,F,T,F,T,F,F,F,T)

dat <- tibble(id     = id, 
              age    = age, 
              gender = gender, 
              isx    = isx   )

こんな感じのデータでしたね?

dat
# A tibble: 15 × 4
      id   age gender isx  
   <int> <dbl> <chr>  <lgl>
 1     1    30 m      FALSE
 2     2    40 m      TRUE 
 3     3    65 f      FALSE
 4     4    34 f      FALSE
 5     5    86 f      TRUE 
 6     6    43 m      TRUE 
 7     7    64 m      TRUE 
 8     8    26 f      FALSE
 9     9    87 f      TRUE 
10    10    45 m      FALSE
11    11    76 f      TRUE 
12    12    24 f      FALSE
13    13    97 m      FALSE
14    14    45 m      FALSE
15    15    34 m      TRUE 

では、プチ課題ですが、

をsummarise関数を利用して作成してみてください。

できましたか?男性の割合が少しむずかしいかもしれません。

dat2 <- dat %>% 
  summarise(age_mean = mean(age),
            gender_male_p  = sum(gender=="m")/n() )

いかがでしょうか?年齢の平均、性別の個数と割合の計算をここでは行っていますが、スクリプトの動作、イメージできますか?

dat2
# A tibble: 1 × 2
  age_mean gender_male_p
     <dbl>         <dbl>
1     53.1         0.533

このdat2をスライドでお示しした形に変換してみましよう。

この処理は、Section5のpivot_xxx関数を利用すればできますビデオをとめてやってみてください。

できましたか?

pivot_longerだけを利用するのであれば、

dat2 %>% 
  pivot_longer(everything())
# A tibble: 2 × 2
  name           value
  <chr>          <dbl>
1 age_mean      53.1  
2 gender_male_p  0.533

これだけでもOKです。ただ、スライドのように日本語で書くのであれば

dat2 %>% 
  
  mutate(
    `年齢(平均)` = age_mean,
    `性別:男性(%)` = 100*gender_male_p
  ) %>%
  
  select(!c(age_mean, gender_male_p)) %>% 
  
  pivot_longer(everything(),
               names_to = " ",
               values_to = "全体")
# A tibble: 2 × 2
  ` `           全体
  <chr>        <dbl>
1 年齢(平均)    53.1
2 性別:男性(%)  53.3

どうでしょうか?集計できましたね?

次以降の動画では、この変換について1行ずつ解説していきます。