Как объединить два фрейма данных, один из которых содержит вложенные списки в R? - PullRequest
1 голос
/ 02 июня 2019

В частности, я пытаюсь объединить два фрейма данных UN_M.49_Countries и UN_M.49_Regions, которые содержат коды стран во вложенных списках.

> UN_M.49_Countries
    Code           Name ISO_Alpha_3
1    004    Afghanistan         AFG
2    248  Åland Islands         ALA
3    008        Albania         ALB
...

> UN_M.49_Regions
   Code             Name  Parent                           Children    Type
1   001            World               002, 019, 010, 142, 150, 009  Region     
2   002           Africa     001                           015, 202  Region
3   015  Northern Africa     002  012, 818, 434, 504, 729, 788, 732  Region
...

Я хотел бы создать новую таблицу, которая добавляетдве колонки к UN_M.49_Countries.

> new_table
    Code           Name  ISO_Alpha_3  Region        Subregion
1    004    Afghanistan          AFG    Asia    Southern Asia
2    248  Åland Islands          ALA  Europe  Northern Europe
3    008        Albania          ALB  Europe  Southern Europe
...

Я новичок в программировании и R и, честно говоря, я даже не знаю, с чего начать.Любая помощь будет высоко ценится!

install.packages("ISOcodes")
library(ISOcodes)
UN_M.49_Countries
UN_M.49_Regions

1 Ответ

0 голосов
/ 02 июня 2019

Если вам нужна конкретная версия, вы можете изменить Южную Европу на любую, какую захотите, также, если вы не сделаете подмножество, вы можете получить весь мир.

Ознакомьтесь с документацией к пакету.

https://cran.r -project.org / веб / пакеты / ISOcodes / ISOcodes.pdf

data("UN_M.49_Regions")
data("UN_M.49_Countries")
region <- subset(UN_M.49_Regions, Name == "Southern Europe")
codes <- unlist(strsplit(region$Children, ", "))
subset(UN_M.49_Countries, Code %in% codes)

Использование Tidyverse

library(ISOcodes)
library(tidyverse)
library(stringr)

countries <- UN_M.49_Countries
regions <- UN_M.49_Regions
countries <- UN_M.49_Countries



region_focused <- regions %>% 
  mutate(codes  = str_split(Children,",")) %>% 
  unnest() %>%
  left_join(countries, by = c("codes" = "Code"))

countr_focused <- regions %>% 
  mutate(codes  = str_split(Children,",")) %>% 
  unnest() %>%
  right_join(countries, by = c("codes" = "Code"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...