简体   繁体   中英

How do I combine two data frames one of which contains nested lists in R?

Specifically, I'm trying to combine the two data frames UN_M.49_Countries and UN_M.49_Regions which contains the country codes in nested lists.

> 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
...

I would like to build a new table which adds two columns to 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
...

I am new to programming and R and, to be honest, I do not even know where to start. Any help would be much appreciated!

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

if you need to get a specific version you can change Southern Europe to anything you would like, also if don't subset you can get the whole world.

Check out the package documentation.

https://cran.r-project.org/web/packages/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)

Using the 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"))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM