Я пытаюсь получить длинный набор данных с помощью объединений:
tibble::tribble(
~country, ~fit, ~ country_iso, ~year,
"Afghanistan", 1.56598484506948, "AFG", "2017",
"Angola", -1.68805891716096, "AGO", "2017",
"Albania", 0.865738438573542, "ALB", "2017",
"Afghanistan", 1.42313952299157, "AFG", "2014",
"Angola", -0.889994054489868, "AGO", "2014",
"Albania", 0.162782415602255, "ALB", "2014"
)
#> # A tibble: 6 x 4
#> country fit country_iso year
#> <chr> <dbl> <chr> <chr>
#> 1 Afghanistan 1.57 AFG 2017
#> 2 Angola -1.69 AGO 2017
#> 3 Albania 0.866 ALB 2017
#> 4 Afghanistan 1.42 AFG 2014
#> 5 Angola -0.890 AGO 2014
#> 6 Albania 0.163 ALB 2014
Возможно ли сделать это напрямую с помощью объединений?Вот наборы данных, которые необходимо объединить:
library(tidyverse)
values_2017 <- tibble::tribble(
~country, ~fit, ~year,
"Afghanistan", 1.56598484506948, "2017",
"Angola", -1.68805891716096, "2017",
"Albania", 0.865738438573542, "2017"
)
meta <- tibble::tribble(
~country_iso, ~country,
"AFG", "Afghanistan",
"AGO", "Angola",
"ALB", "Albania"
)
values_2014 <- tibble::tribble(
~country_iso, ~year, ~fit,
"AFG", "2014", 1.42313952299157,
"AGO", "2014", -0.889994054489868,
"ALB", "2014", 0.162782415602255
)
Первый шаг при соединении метаданных с первым набором данных дает ожидаемый результат:
values_2017 %>%
left_join(meta)
#> Joining, by = "country"
#> # A tibble: 3 x 4
#> country fit year country_iso
#> <chr> <dbl> <chr> <chr>
#> 1 Afghanistan 1.57 2017 AFG
#> 2 Angola -1.69 2017 AGO
#> 3 Albania 0.866 2017 ALB
Но мне не удается выполнитьследующий шаг, и я чувствую, что не могу понять, что требуется концептуально:
values_2017 %>%
left_join(meta) %>%
full_join(values_2014, by = "country_iso")
#> Joining, by = "country"
#> # A tibble: 3 x 6
#> country fit.x year.x country_iso year.y fit.y
#> <chr> <dbl> <chr> <chr> <chr> <dbl>
#> 1 Afghanistan 1.57 2017 AFG 2014 1.42
#> 2 Angola -1.69 2017 AGO 2014 -0.890
#> 3 Albania 0.866 2017 ALB 2014 0.163
values_2017 %>%
left_join(meta) %>%
left_join(values_2014, by = "country_iso")
#> Joining, by = "country"
#> # A tibble: 3 x 6
#> country fit.x year.x country_iso year.y fit.y
#> <chr> <dbl> <chr> <chr> <chr> <dbl>
#> 1 Afghanistan 1.57 2017 AFG 2014 1.42
#> 2 Angola -1.69 2017 AGO 2014 -0.890
#> 3 Albania 0.866 2017 ALB 2014 0.163
Как я должен думать об этом?