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
では、プチ課題ですが、
- 年齢の平均値
- 性別(m)の割合
を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行ずつ解説していきます。