172  全体集計の実践

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)

tibble関数を利用してベクトルを一つのテーブルとしてまとめます

hyou <- tibble(id     = id, 
               age    = age, 
               gender = gender, 
               isx    = isx   ) %>% 
  
  #サマライズを利用してデータを集計します
  summarise(age_mean = mean(age),
            gender_male_p  = sum(gender=="m")/n() ) 



hyou <- hyou %>% 
  mutate(
    `年齢(平均)` = age_mean,
    `性別:男性(%)`  = 100*gender_male_p
  )

hyou
# A tibble: 1 × 4
  age_mean gender_male_p `年齢(平均)` `性別:男性(%)`
     <dbl>         <dbl>        <dbl>          <dbl>
1     53.1         0.533         53.1           53.3

ここでヨコ持ちのデータになっていますが、目的とする集計は終わっています。

あとは、縦方向のデータに変換すればよいので、必要な列だけ残して、変換しましょう。

hyou <- hyou %>% 
  select(!c(age_mean, gender_male_p)) %>% 
  pivot_longer(everything(),
               names_to = " ",
               values_to = "全体")

hyou
# A tibble: 2 × 2
  ` `           全体
  <chr>        <dbl>
1 年齢(平均)    53.1
2 性別:男性(%)  53.3

完成です。

hyou
# A tibble: 2 × 2
  ` `           全体
  <chr>        <dbl>
1 年齢(平均)    53.1
2 性別:男性(%)  53.3

いかがでしょうか?

今回は1ステップずつわけて関数の処理を実行しましたが実際は

hyou <- tibble(id  = id, 
               age = age, 
               gender = gender,
               isx    = isx   ) %>% 
  
  summarise(age_mean = mean(age),
            gender_male_p  = 100*sum(gender=="m")/n() ) %>% 
  mutate(
    `年齢(平均)` = age_mean,
    `性別:男性(%)`  = gender_male_p
  ) %>%
  select(!c(age_mean, gender_male_p)) %>% 
  pivot_longer(everything(),
               names_to = " ",
               values_to = "全体") 
  

hyou
# A tibble: 2 × 2
  ` `           全体
  <chr>        <dbl>
1 年齢(平均)    53.1
2 性別:男性(%)  53.3

こんな感じで処理を書くと目的の集計ができあがりました!

いかでしょうか?

処理の内容理解できましたか?

ここで上の内容を応用してもう少し複雑な集計をやってみましょう。

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 

のデータを加工して、

                  | |

|:=================:|:===========:| |年齢:平均(最小-最大)| XX.XX(XX-XX)| |性別:男性 人数(%) | XX(XX.X%) |

というような形に加工しましょう。

もしご自身でできそうな場合は、とりくんでみてください。

最小を求める関数は、min 最大を求める関数は、max 文字列を結合するには、stringr::str_c関数

を利用します。