library(tidyverse)
ratings <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2022/2022-01-25/ratings.csv')
details <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2022/2022-01-25/details.csv')Анализ данных про настольные игры
Введение
Перед вами два связанных набора данных ratings и details, которые содержат в себе информацию об огромном количестве настольных игр. Наборы данных взяты с проекта Tidy Tuesday (в свою очередь, эти данные взяты с Kaggle, где есть данные на 3 гигабайта со всеми обзорами на игры!), а собраны с сайта BoardGamesGeek.
Описание колонок (codebook) можно посмотреть на гитхабе проекта Tidy Tuesday.
Исследуем ratings
Давайте для начала немного исследуем датасет ratings.
Подсмотреть код (но лучше решите сами!)
ratings# A tibble: 21,831 × 10
num id name year rank average bayes…¹ users…² url thumb…³
<dbl> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
1 105 30549 Pandemic 2008 106 7.59 7.49 108975 /boa… https:…
2 189 822 Carcassonne 2000 190 7.42 7.31 108738 /boa… https:…
3 428 13 Catan 1995 429 7.14 6.97 108024 /boa… https:…
4 72 68448 7 Wonders 2010 73 7.74 7.63 89982 /boa… https:…
5 103 36218 Dominion 2008 104 7.61 7.50 81561 /boa… https:…
6 191 9209 Ticket to Ride 2004 192 7.41 7.30 76171 /boa… https:…
7 100 178900 Codenames 2015 101 7.6 7.51 74419 /boa… https:…
8 3 167791 Terraforming … 2016 4 8.42 8.27 74216 /boa… https:…
9 15 173346 7 Wonders Duel 2015 16 8.11 7.98 69472 /boa… https:…
10 35 31260 Agricola 2007 36 7.93 7.81 66093 /boa… https:…
# … with 21,821 more rows, and abbreviated variable names ¹bayes_average,
# ²users_rated, ³thumbnail
Выберем из ratings колонки name, average, users_rated
Подсмотреть код (но лучше решите сами!)
ratings %>%
select(name, average, users_rated)# A tibble: 21,831 × 3
name average users_rated
<chr> <dbl> <dbl>
1 Pandemic 7.59 108975
2 Carcassonne 7.42 108738
3 Catan 7.14 108024
4 7 Wonders 7.74 89982
5 Dominion 7.61 81561
6 Ticket to Ride 7.41 76171
7 Codenames 7.6 74419
8 Terraforming Mars 8.42 74216
9 7 Wonders Duel 8.11 69472
10 Agricola 7.93 66093
# … with 21,821 more rows
Выберем из тиббла ratings 20, 500, 2000 и 20000ные строки:
Подсмотреть код (но лучше решите сами!)
ratings %>%
slice(c(20, 500, 2000, 20000))# A tibble: 4 × 10
num id name year rank average bayes_…¹ users…² url thumb…³
<dbl> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
1 22 266192 Wingspan 2019 23 8.1 7.94 56079 /boa… https:…
2 1150 826 Cartagena 2000 1151 6.69 6.45 7601 /boa… https:…
3 2704 58 Kings & Things 1986 2705 6.51 5.97 1629 /boa… https:…
4 17650 13440 Horrific 2004 17651 5.8 5.50 36 /boa… https:…
# … with abbreviated variable names ¹bayes_average, ²users_rated, ³thumbnail
Отранжируем игры в ratings по названиям (в алфавитном порядке):
Подсмотреть код (но лучше решите сами!)
ratings %>%
arrange(name)# A tibble: 21,831 × 10
num id name year rank average bayes…¹ users…² url thumb…³
<dbl> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
1 18328 122711 "\"La Garde r… 2011 18329 5.39 5.50 35 /boa… https:…
2 17674 23304 "\"Oh My God!… 2014 17675 5.77 5.50 84 /boa… https:…
3 10121 4016 "\"Scratch On… 1995 10122 7.42 5.55 52 /boa… https:…
4 11197 38836 "\"Tarleton's… 2010 11198 7.06 5.54 50 /boa… https:…
5 17013 286535 "#MyLife" 2019 17014 5.69 5.51 60 /boa… https:…
6 5646 188325 "'65: Squad-L… 2016 5647 7.67 5.66 153 /boa… https:…
7 20470 7463 "'CA' Tactica… 1973 20471 5.31 5.47 109 /boa… https:…
8 6950 6253 "'Wacht am Rh… 1977 6951 7.43 5.61 131 /boa… https:…
9 12277 258440 "(Come on) Le… 2018 12278 7.28 5.53 38 /boa… https:…
10 8165 128568 "(Your Name H… 2012 8166 7.13 5.58 115 /boa… https:…
# … with 21,821 more rows, and abbreviated variable names ¹bayes_average,
# ²users_rated, ³thumbnail
Отранжируем игры в ratings от по средним оценкам (average): от лучших к худшим.
Подсмотреть код (но лучше решите сами!)
ratings %>%
arrange(desc(average))# A tibble: 21,831 × 10
num id name year rank average bayes…¹ users…² url thumb…³
<dbl> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
1 13628 274471 Malhya: Lands… 2022 13629 9.57 5.53 41 /boa… https:…
2 14432 275777 Erune 2021 14433 9.56 5.52 43 /boa… https:…
3 17552 228370 TerroriXico 2018 17553 9.43 5.50 70 /boa… https:…
4 7432 345976 System Gatewa… 2021 7433 9.4 5.6 47 /boa… https:…
5 11478 322354 DEFCON 1 2022 11479 9.36 5.54 60 /boa… https:…
6 13821 173514 Meeple Quest 2021 13822 9.31 5.52 45 /boa… https:…
7 6961 85147 Wings of the … 2019 6962 9.29 5.61 101 /boa… https:…
8 14646 281257 Aeolis 2020 14647 9.25 5.52 40 /boa… https:…
9 16996 207203 War Titans: I… 0 16997 9.24 5.51 58 /boa… https:…
10 14752 151070 Gladiatoris 2009 14753 9.23 5.52 31 /boa… https:…
# … with 21,821 more rows, and abbreviated variable names ¹bayes_average,
# ²users_rated, ³thumbnail
У нас получилось много малоизвестных игр, у которых мало оценок. Давайте отделим для дальнейшего анализа только 5% игр, которые получили больше всего оценок (users_rated) и сохраним полученную таблицу в переменную ratings_topgames.
Подсмотреть код (но лучше решите сами!)
ratings_topgames <- ratings %>%
slice_max(order_by = users_rated, prop = .05)
ratings_topgames# A tibble: 1,091 × 10
num id name year rank average bayes…¹ users…² url thumb…³
<dbl> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
1 105 30549 Pandemic 2008 106 7.59 7.49 108975 /boa… https:…
2 189 822 Carcassonne 2000 190 7.42 7.31 108738 /boa… https:…
3 428 13 Catan 1995 429 7.14 6.97 108024 /boa… https:…
4 72 68448 7 Wonders 2010 73 7.74 7.63 89982 /boa… https:…
5 103 36218 Dominion 2008 104 7.61 7.50 81561 /boa… https:…
6 191 9209 Ticket to Ride 2004 192 7.41 7.30 76171 /boa… https:…
7 100 178900 Codenames 2015 101 7.6 7.51 74419 /boa… https:…
8 3 167791 Terraforming … 2016 4 8.42 8.27 74216 /boa… https:…
9 15 173346 7 Wonders Duel 2015 16 8.11 7.98 69472 /boa… https:…
10 35 31260 Agricola 2007 36 7.93 7.81 66093 /boa… https:…
# … with 1,081 more rows, and abbreviated variable names ¹bayes_average,
# ²users_rated, ³thumbnail
Теперь посмотрим на худшие игры в новом датасете ratings_topgames, отранжировав игры про средней оценке (average):
Подсмотреть код (но лучше решите сами!)
ratings_topgames %>%
arrange(average)# A tibble: 1,091 × 10
num id name year rank average bayes…¹ users…² url thumb…³
<dbl> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
1 21829 11901 Tic-Tac-Toe 1300 21830 2.7 3.58 3436 /boa… https:…
2 21828 5432 Chutes and Lad… 200 21829 2.87 3.61 4035 /boa… https:…
3 21827 5048 Candy Land 1949 21828 3.18 3.80 4238 /boa… https:…
4 21824 1410 Trouble 1965 21825 3.81 4.30 3484 /boa… https:…
5 21820 3737 Operation 1965 21821 4.12 4.51 3827 /boa… https:…
6 21822 2921 The Game of Li… 1960 21823 4.31 4.31 11324 /boa… https:…
7 21823 1406 Monopoly 1933 21824 4.37 4.30 30803 /boa… https:…
8 21813 2136 Pachisi 400 21814 4.5 4.69 4768 /boa… https:…
9 21816 2407 Sorry! 1929 21817 4.52 4.65 6165 /boa… https:…
10 21807 5894 Twister 1966 21808 4.54 4.76 4230 /boa… https:…
# … with 1,081 more rows, and abbreviated variable names ¹bayes_average,
# ²users_rated, ³thumbnail
Верните в виде строкового вектора 10 худших игр (по average) из ratings_topgames.
Подсмотреть код (но лучше решите сами!)
ratings_topgames %>%
arrange(average) %>%
slice(1:10) %>%
pull(name) [1] "Tic-Tac-Toe" "Chutes and Ladders" "Candy Land"
[4] "Trouble" "Operation" "The Game of Life"
[7] "Monopoly" "Pachisi" "Sorry!"
[10] "Twister"
Теперь исследуем датасет details с дополнительными метаданными про настольные игры. Отранжируем игры в details по убыванию minplaytime, чтобы посмотреть самые долгие игры.
Подсмотреть код (но лучше решите сами!)
details %>%
arrange(desc(minplaytime))# A tibble: 21,631 × 23
num id primary descr…¹ yearp…² minpl…³ maxpl…⁴ playi…⁵ minpl…⁶ maxpl…⁷
<dbl> <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 9553 4815 The Cam… This i… 1979 8 10 60000 60000 60000
2 10865 46669 1914: O… (from … 2013 2 4 17280 17280 17280
3 13470 6942 Drang N… Introd… 1973 2 4 12000 12000 12000
4 14448 239982 The Eni… We wan… 2017 1 4 10000 6000 10000
5 4975 5651 The Lon… The Lo… 1979 2 8 5400 5400 5400
6 6528 13532 Guderia… (from … 2001 1 6 4500 4500 4500
7 5951 4102 Europa … "… 1993 1 6 3600 3600 3600
8 6792 32989 Axis Em… From t… 2011 1 3 3600 3600 3600
9 6332 8993 Fire in… Fire i… 1984 2 4 3000 3000 3000
10 7517 22359 Steel W… (from … 2010 1 1 3000 3000 3000
# … with 21,621 more rows, 13 more variables: minage <dbl>,
# boardgamecategory <chr>, boardgamemechanic <chr>, boardgamefamily <chr>,
# boardgameexpansion <chr>, boardgameimplementation <chr>,
# boardgamedesigner <chr>, boardgameartist <chr>, boardgamepublisher <chr>,
# owned <dbl>, trading <dbl>, wanting <dbl>, wishing <dbl>, and abbreviated
# variable names ¹description, ²yearpublished, ³minplayers, ⁴maxplayers,
# ⁵playingtime, ⁶minplaytime, ⁷maxplaytime
Выкинем все игры, в которых минимальное время игры – 0 минут. Сохраним результаты в новый тибл details_longplay.
Подсмотреть код (но лучше решите сами!)
details_longplay <- details %>%
filter(minplaytime != 0)
details_longplay# A tibble: 20,989 × 23
num id primary descr…¹ yearp…² minpl…³ maxpl…⁴ playi…⁵ minpl…⁶ maxpl…⁷
<dbl> <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 0 30549 Pandemic In Pan… 2008 2 4 45 45 45
2 1 822 Carcass… Carcas… 2000 2 5 45 30 45
3 2 13 Catan In CAT… 1995 3 4 120 60 120
4 3 68448 7 Wonde… You ar… 2010 2 7 30 30 30
5 4 36218 Dominion "… 2008 2 4 30 30 30
6 5 9209 Ticket … With e… 2004 2 5 60 30 60
7 6 178900 Codenam… Codena… 2015 2 8 15 15 15
8 7 167791 Terrafo… In the… 2016 1 5 120 120 120
9 8 173346 7 Wonde… In man… 2015 2 2 30 30 30
10 9 31260 Agricola Descri… 2007 1 5 150 30 150
# … with 20,979 more rows, 13 more variables: minage <dbl>,
# boardgamecategory <chr>, boardgamemechanic <chr>, boardgamefamily <chr>,
# boardgameexpansion <chr>, boardgameimplementation <chr>,
# boardgamedesigner <chr>, boardgameartist <chr>, boardgamepublisher <chr>,
# owned <dbl>, trading <dbl>, wanting <dbl>, wishing <dbl>, and abbreviated
# variable names ¹description, ²yearpublished, ³minplayers, ⁴maxplayers,
# ⁵playingtime, ⁶minplaytime, ⁷maxplaytime
Создадим новую колонку time_group в details_longplay, в которую запишем:
"short"– если минимальное время игры меньше или равно 10 минутам;"middle"– если минимальное время игры больше 10 минут, но меньше или равно 120 минутам;"long"– если минимальное время игры больше 120 минут, но не больше суток;"extremely long"– если минимальное время игры больше суток (о, господи).
Новый датасет сохраните в переменную details_longplay_time.
Подсмотреть код (но лучше решите сами!)
details_longplay_time <- details_longplay %>%
mutate(time_group = case_when(minplaytime <= 10 ~ "short",
minplaytime <= 120 ~ "middle",
minplaytime <= 24 * 60 ~ "long",
.default = "extremely long"))Посчитайте, сколько игр в каждой из получившихся категорий.
Подсмотреть код (но лучше решите сами!)
details_longplay_time %>%
count(time_group)# A tibble: 4 × 2
time_group n
<chr> <int>
1 extremely long 19
2 long 1655
3 middle 17556
4 short 1759
Время объединяться!
Дополните набор данных details_longplay_time данными ratings. Проверьте, что количество строчек в details_lonngplay_time не изменилось (вам для этого нужно подобрать правильный *_join)! Объединить нужно по ключу id.
Подсмотреть код (но лучше решите сами!)
details_longplay_time %>%
left_join(ratings, by = "id")# A tibble: 20,989 × 33
num.x id primary descr…¹ yearp…² minpl…³ maxpl…⁴ playi…⁵ minpl…⁶ maxpl…⁷
<dbl> <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 0 30549 Pandemic In Pan… 2008 2 4 45 45 45
2 1 822 Carcass… Carcas… 2000 2 5 45 30 45
3 2 13 Catan In CAT… 1995 3 4 120 60 120
4 3 68448 7 Wonde… You ar… 2010 2 7 30 30 30
5 4 36218 Dominion "… 2008 2 4 30 30 30
6 5 9209 Ticket … With e… 2004 2 5 60 30 60
7 6 178900 Codenam… Codena… 2015 2 8 15 15 15
8 7 167791 Terrafo… In the… 2016 1 5 120 120 120
9 8 173346 7 Wonde… In man… 2015 2 2 30 30 30
10 9 31260 Agricola Descri… 2007 1 5 150 30 150
# … with 20,979 more rows, 23 more variables: minage <dbl>,
# boardgamecategory <chr>, boardgamemechanic <chr>, boardgamefamily <chr>,
# boardgameexpansion <chr>, boardgameimplementation <chr>,
# boardgamedesigner <chr>, boardgameartist <chr>, boardgamepublisher <chr>,
# owned <dbl>, trading <dbl>, wanting <dbl>, wishing <dbl>, time_group <chr>,
# num.y <dbl>, name <chr>, year <dbl>, rank <dbl>, average <dbl>,
# bayes_average <dbl>, users_rated <dbl>, url <chr>, thumbnail <chr>, and …
Теперь посчитайте средние average, users_rated и owned для каждой группы по времени игры (колонка time_group, которую мы создавали ранее)
Подсмотреть код (но лучше решите сами!)
details_longplay_time %>%
left_join(ratings, by = "id") %>%
group_by(time_group) %>%
summarize(rating = mean(average, na.rm = TRUE),
rated = mean(users_rated, na.rm = TRUE),
owned = mean(owned, na.rm = TRUE))# A tibble: 4 × 4
time_group rating rated owned
<chr> <dbl> <dbl> <dbl>
1 extremely long 7.50 220. 718.
2 long 6.90 408. 857.
3 middle 6.42 996. 1664.
4 short 6.08 393. 781.
Теперь сделаем обратную задачу: возьмем тибл ratings_topgames, созданный ранее, и дополним его набором данных details (по ключу id).
Подсмотреть код (но лучше решите сами!)
ratings_topgames %>%
left_join(details, by = "id")# A tibble: 1,091 × 32
num.x id name year rank average bayes…¹ users…² url thumb…³ num.y
<dbl> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr> <dbl>
1 105 30549 Pandemic 2008 106 7.59 7.49 108975 /boa… https:… 0
2 189 822 Carcass… 2000 190 7.42 7.31 108738 /boa… https:… 1
3 428 13 Catan 1995 429 7.14 6.97 108024 /boa… https:… 2
4 72 68448 7 Wonde… 2010 73 7.74 7.63 89982 /boa… https:… 3
5 103 36218 Dominion 2008 104 7.61 7.50 81561 /boa… https:… 4
6 191 9209 Ticket … 2004 192 7.41 7.30 76171 /boa… https:… 5
7 100 178900 Codenam… 2015 101 7.6 7.51 74419 /boa… https:… 6
8 3 167791 Terrafo… 2016 4 8.42 8.27 74216 /boa… https:… 7
9 15 173346 7 Wonde… 2015 16 8.11 7.98 69472 /boa… https:… 8
10 35 31260 Agricola 2007 36 7.93 7.81 66093 /boa… https:… 9
# … with 1,081 more rows, 21 more variables: primary <chr>, description <chr>,
# yearpublished <dbl>, minplayers <dbl>, maxplayers <dbl>, playingtime <dbl>,
# minplaytime <dbl>, maxplaytime <dbl>, minage <dbl>,
# boardgamecategory <chr>, boardgamemechanic <chr>, boardgamefamily <chr>,
# boardgameexpansion <chr>, boardgameimplementation <chr>,
# boardgamedesigner <chr>, boardgameartist <chr>, boardgamepublisher <chr>,
# owned <dbl>, trading <dbl>, wanting <dbl>, wishing <dbl>, and abbreviated …
В колонке boardgamecategory перечислено по несколько жанров для каждой категории. Нам нужно что-то с этим сделать, чтобы анализировать категории игр: сделайте длинный датафрейм, в каждой строчке которого будет уникальное сочетание игры и категории (соответственно, может быть несколько строчек для одной игры).
Повторяющиеся сочетания (такие есть) необходимо удалить.
Для этого, вам нужно для начала немного модифицировать колонку boardgamecategory, для начала удалив из нее символы [, |, ]. Воспользуйтесь для этого пакетом stringr, а вот нужную функцию найдите самостоятельно! В качестве паттерна для удаления выбранных значений можете воспользоваться регулярным выражением "\\[|'|\\]".
Подсмотреть код (но лучше решите сами!)
ratings_topgames %>%
left_join(details, by = "id") %>%
transmute(name, boardgamecategory = str_remove_all(boardgamecategory, "\\[|'|\\]")) %>%
separate_rows(boardgamecategory, sep = ", ") %>%
distinct()# A tibble: 3,396 × 2
name boardgamecategory
<chr> <chr>
1 Pandemic Medical
2 Carcassonne City Building
3 Carcassonne Medieval
4 Carcassonne Territory Building
5 Catan Economic
6 Catan Negotiation
7 7 Wonders Ancient
8 7 Wonders Card Game
9 7 Wonders City Building
10 7 Wonders Civilization
# … with 3,386 more rows
Сделайте широкую табличку, где каждая строчка будет означать игру, а в колонках будут содержаться логичесие значения: TRUE – игра принадлежит категории, FALSE – игра не принадлежит категории.
Подсмотреть код (но лучше решите сами!)
ratings_topgames %>%
left_join(details, by = "id") %>%
transmute(name, boardgamecategory = str_remove_all(boardgamecategory, "\\[|'|\\]")) %>%
separate_rows(boardgamecategory, sep = ", ") %>%
distinct() %>%
mutate(value = TRUE) %>%
pivot_wider(names_from = boardgamecategory,
values_from = value,
values_fill = FALSE)# A tibble: 1,085 × 82
name Medical City …¹ Medie…² Terri…³ Econo…⁴ Negot…⁵ Ancient Card …⁶ Civil…⁷
<chr> <lgl> <lgl> <lgl> <lgl> <lgl> <lgl> <lgl> <lgl> <lgl>
1 Pand… TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
2 Carc… FALSE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
3 Catan FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE
4 7 Wo… FALSE TRUE FALSE FALSE TRUE FALSE TRUE TRUE TRUE
5 Domi… FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE
6 Tick… FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
7 Code… FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
8 Terr… FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE
9 7 Wo… FALSE TRUE FALSE FALSE TRUE FALSE TRUE TRUE TRUE
10 Agri… FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
# … with 1,075 more rows, 72 more variables: Trains <lgl>, Deduction <lgl>,
# `Party Game` <lgl>, `Spies/Secret Agents` <lgl>, `Word Game` <lgl>,
# Environmental <lgl>, `Industry / Manufacturing` <lgl>,
# `Science Fiction` <lgl>, `Space Exploration` <lgl>, Animals <lgl>,
# Farming <lgl>, Renaissance <lgl>, Fighting <lgl>, Miniatures <lgl>,
# Fantasy <lgl>, `Abstract Strategy` <lgl>, Puzzle <lgl>, Dice <lgl>,
# `Movies / TV / Radio theme` <lgl>, Educational <lgl>, Humor <lgl>, …
Посчитайте, сколько игры в каждой категории, составьте топ от наиболее крупных категорий, до самых мелких.
Подсмотреть код (но лучше решите сами!)
ratings_topgames %>%
left_join(details, by = "id") %>%
transmute(boardgamecategory = str_remove_all(boardgamecategory, "\\[|'|\\]")) %>%
separate_rows(boardgamecategory, sep = ", ") %>%
count(boardgamecategory, sort = TRUE)# A tibble: 81 × 2
boardgamecategory n
<chr> <int>
1 Card Game 324
2 Fantasy 208
3 Economic 177
4 Fighting 162
5 Science Fiction 125
6 Adventure 111
7 Medieval 101
8 Exploration 99
9 City Building 92
10 Bluffing 91
# … with 71 more rows
Теперь посчитайте не только количество игр по категории, но и их среднюю оценку, а также самую высокооцененную игру.
Подсмотреть код (но лучше решите сами!)
ratings_topgames %>%
left_join(details, by = "id") %>%
mutate(boardgamecategory = str_remove_all(boardgamecategory, "\\[|'|\\]")) %>%
separate_rows(boardgamecategory, sep = ", ") %>%
arrange(desc(average)) %>%
group_by(boardgamecategory) %>%
summarise(n = n(),
mean_average = mean(average),
highest_score_game = first(name)) %>%
arrange(desc(n))# A tibble: 81 × 4
boardgamecategory n mean_average highest_score_game
<chr> <int> <dbl> <chr>
1 Card Game 324 7.03 Through the Ages: A New Story of Civili…
2 Fantasy 208 7.27 Gloomhaven
3 Economic 177 7.48 Twilight Imperium: Fourth Edition
4 Fighting 162 7.27 Gloomhaven
5 Science Fiction 125 7.42 Twilight Imperium: Fourth Edition
6 Adventure 111 7.39 Gloomhaven
7 Medieval 101 7.29 Tainted Grail: The Fall of Avalon
8 Exploration 99 7.31 Gloomhaven
9 City Building 92 7.32 On Mars
10 Bluffing 91 7.00 Dune
# … with 71 more rows
Наконец, посчитайте минимальное значение (min()), медиану (median()), среднее (mean()) и максимальное значение (max()) для каждой числовой колонки и для каждой категории игр.
Подсмотреть код (но лучше решите сами!)
ratings_topgames %>%
left_join(details, by = "id") %>%
mutate(boardgamecategory = str_remove_all(boardgamecategory, "\\[|'|\\]")) %>%
separate_rows(boardgamecategory, sep = ", ") %>%
group_by(boardgamecategory) %>%
summarise(n = n(), across(where(is.numeric), list(min = min,
median = median,
mean = mean,
max = max)))# A tibble: 81 × 82
boardga…¹ n num.x…² num.x…³ num.x…⁴ num.x…⁵ id_min id_me…⁶ id_mean id_max
<chr> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 "\"Child… 36 406 1806 8702. 21829 150 17191 57395. 226320
2 "Abstrac… 69 57 849 2666. 21829 3 7854 83793. 300877
3 "Action … 32 62 973 2656. 21820 150 98066 91753. 233020
4 "Adventu… 111 0 434 659. 5691 699 127398 123460. 312484
5 "Age of … 9 10 384 428. 816 9217 79828 93968. 244711
6 "America… 2 442 696 696 950 551 60028. 60028. 119506
7 "America… 2 384 396. 396. 409 79828 104412 104412 128996
8 "America… 1 409 409 409 409 128996 128996 128996 128996
9 "America… 15 11 769 758. 1575 878 143741 112098. 232405
10 "Ancient" 60 15 452. 576. 2011 12 56710. 101384. 312484
# … with 71 more rows, 72 more variables: year_min <dbl>, year_median <dbl>,
# year_mean <dbl>, year_max <dbl>, rank_min <dbl>, rank_median <dbl>,
# rank_mean <dbl>, rank_max <dbl>, average_min <dbl>, average_median <dbl>,
# average_mean <dbl>, average_max <dbl>, bayes_average_min <dbl>,
# bayes_average_median <dbl>, bayes_average_mean <dbl>,
# bayes_average_max <dbl>, users_rated_min <dbl>, users_rated_median <dbl>,
# users_rated_mean <dbl>, users_rated_max <dbl>, num.y_min <dbl>, …