library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.3 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.3 ✔ tibble 3.2.1
## ✔ lubridate 1.9.2 ✔ tidyr 1.3.0
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
nations <- read_csv("nations.csv")
## Rows: 5275 Columns: 10
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (5): iso2c, iso3c, country, region, income
## dbl (5): year, gdp_percap, population, birth_rate, neonat_mortal_rate
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
nations <- nations |> mutate(gdp = gdp_percap * population / 10^12)
nations
## # A tibble: 5,275 × 11
## iso2c iso3c country year gdp_percap population birth_rate neonat_mortal_rate
## <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 AD AND Andorra 1996 NA 64291 10.9 2.8
## 2 AD AND Andorra 1994 NA 62707 10.9 3.2
## 3 AD AND Andorra 2003 NA 74783 10.3 2
## 4 AD AND Andorra 1990 NA 54511 11.9 4.3
## 5 AD AND Andorra 2009 NA 85474 9.9 1.7
## 6 AD AND Andorra 2011 NA 82326 NA 1.6
## 7 AD AND Andorra 2004 NA 78337 10.9 2
## 8 AD AND Andorra 2010 NA 84419 9.8 1.7
## 9 AD AND Andorra 2001 NA 67770 11.8 2.1
## 10 AD AND Andorra 2002 NA 71046 11.2 2.1
## # ℹ 5,265 more rows
## # ℹ 3 more variables: region <chr>, income <chr>, gdp <dbl>
Chart 1
gdp_by_country <- nations |> filter(country %in% c("China", "Germany", "Japan", "United States")) |> group_by(country, year) |> summarize(GDP = sum(gdp, na.rm = TRUE))
## `summarise()` has grouped output by 'country'. You can override using the
## `.groups` argument.
gdp_by_country
## # A tibble: 100 × 3
## # Groups: country [4]
## country year GDP
## <chr> <dbl> <dbl>
## 1 China 1990 1.11
## 2 China 1991 1.26
## 3 China 1992 1.47
## 4 China 1993 1.71
## 5 China 1994 1.98
## 6 China 1995 2.24
## 7 China 1996 2.51
## 8 China 1997 2.79
## 9 China 1998 3.04
## 10 China 1999 3.32
## # ℹ 90 more rows
gdp_by_country |> ggplot(aes(x = year, y = GDP, color = country)) +
geom_point() +
geom_line() +
labs (
title = "China's Rise to Become the Largest Economy",
x = "year",
y = "GDP ($ trillion)",
) +
theme (
panel.background = element_rect(fill = "transparent"),
panel.grid = element_line(color = "gray90")
) +
scale_color_brewer(palette = "Set1", name = NULL)

Chart 2
gdp_by_region <- nations |> group_by(region, year) |> summarise(GDP = sum(gdp, na.rm = TRUE))
## `summarise()` has grouped output by 'region'. You can override using the
## `.groups` argument.
gdp_by_region
## # A tibble: 175 × 3
## # Groups: region [7]
## region year GDP
## <chr> <dbl> <dbl>
## 1 East Asia & Pacific 1990 5.52
## 2 East Asia & Pacific 1991 6.03
## 3 East Asia & Pacific 1992 6.50
## 4 East Asia & Pacific 1993 7.04
## 5 East Asia & Pacific 1994 7.64
## 6 East Asia & Pacific 1995 8.29
## 7 East Asia & Pacific 1996 8.96
## 8 East Asia & Pacific 1997 9.55
## 9 East Asia & Pacific 1998 9.60
## 10 East Asia & Pacific 1999 10.1
## # ℹ 165 more rows
gdp_by_region |> ggplot(aes(x = year, y = GDP, fill = region)) +
geom_area(color = "white") +
labs (
title = "GDP by World Bank Region",
x = "year",
y = "GDP ($ trillion)"
) +
theme (
panel.background = element_rect(fill = "transparent"),
panel.grid = element_line(color = "gray90")
) +
scale_fill_brewer(palette = "Set2", name = "region")
