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関数
を利用します。