Слияние фреймов данных разных лет - PullRequest
1 голос
/ 09 июля 2020

Я пытаюсь объединить некоторые фреймы данных с помощью R. Вы можете найти фрейм данных здесь https://www.kaggle.com/mathurinache/world-happiness-report.

Есть 6 фреймов данных, каждый на один год (2015-2020).

Можно ли как-нибудь объединить эти даты с использованием года в качестве нового столбца?

Ex:
Year Country     Region
2015 Switzerland Western Europe  ...
2016 Switzerland Western Europe  ...
2017 Switzerland Western Europe  ...
.
.
.
.

1 Ответ

0 голосов
/ 10 июля 2020

Сначала вам нужно очистить данные, чтобы они содержали те же столбцы. Я попробовал, но он еще не идеален. Вам все еще необходимо выяснить, как определяется продолжительность здоровой жизни на каждый год. В 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...