Сначала вам нужно очистить данные, чтобы они содержали те же столбцы. Я попробовал, но он еще не идеален. Вам все еще необходимо выяснить, как определяется продолжительность здоровой жизни на каждый год. В 2020 году это будет число в годах, в 2019 году это будет стандартизованное значение, а в другие годы это, вероятно, пропорция относительно реальной продолжительности жизни. Кроме того, логарифмическое преобразование ВВП в 2020 году - мое лучшее предположение, поэтому нет гарантии, что это приведет к тому, что данные за 2020 год будут в том же масштабе, что и остальные данные.
library(tidyverse)
mypath <- "Insert/Your/Path/Here/"
file_ls <- paste0(mypath, list.files(path = mypath, pattern = "*.csv"))
dat_ls <- tibble(year = 2015:2020, # setup a nested tibble
data = set_names(map(file_ls, ~ read.csv(.x) %>% as_tibble), year)) %>%
# mutate the 2020 data to match the other years
mutate(data = map_at(data, "2020",
~ mutate(.x,
Rank = rank(desc(Ladder.score)),
Logged.GDP.per.capita = log(exp(Logged.GDP.per.capita), exp(8)))
)) %>%
# enter here more map_at calls to transform the life expectancy column
# ...
# switch to rowwise, so that `map` etc is no longer needed
rowwise(year) %>%
# select names in each data set in given order and then rename them with set_names
mutate(data2 = list(select(data,
contains("country"),
contains("rank"),
contains("score") & !contains("Dystopia") & !contains("standard"),
contains("gdp") & !contains("explained"),
contains("expectancy") & !contains("explained")
) %>%
set_names(., c("country",
"rank",
"happiness_score",
"gdp_per_capita",
"life_expectancy"))
)) %>%
select(year, data2) %>%
unnest(data2)