1

我正在创建一个图表,将每个国家的预期寿命年龄和国家养老金年龄相关联。我使用网络抓取包从 2 个维基百科页面抓取 2 个数据集。

其中一个数据集包含“国家”列,另一个数据集包含“国家和地区”列。这是一个问题,因为两个数据集都需要合并,但由于“国家和地区”列中的区域而导致不平衡。

为了解决这个问题,我需要在合并数据集之前删除“国家和地区”中的区域,所以它是平衡的。我需要用“国家”从“国家和地区”中找到不匹配的数据,将其删除,然后用 2 个数据集创建一个数据框。

library(xml2)
library(rvest)
library(stringr)

urlLifeExpectancy <- "https://en.wikipedia.org/wiki/List_of_countries_by_life_expectancy"

extractedLifeData = urlLifeExpectancy %>%
  read_html() %>%
  html_node(xpath = '//*[@id="mw-content-text"]/div/table[1]') %>%
  html_table(fill = TRUE)

urlPensionAge <- "https://en.wikipedia.org/wiki/Retirement_age#Retirement_age_by_country"

extractedPensionData = urlPensionAge %>%
  read_html() %>%
  html_node(xpath = '//*[@id="mw-content-text"]/div/table[3]') %>%
  html_table(fill = TRUE)
4

2 回答 2

1

我们可以使用 join fromdata.table

library(data.table)
setDT(extractedLifeData[c(1, 5, 7)][extractedPensionDate[1:3],
       on = .(Country = `Country and regions`)]
于 2019-05-26T14:27:07.387 回答
0

我们可以merge通过从两个数据集中选择我们需要的列来使用

merge(extractedLifeData[c(1, 5, 7)], extractedPensionData[1:3], 
       by.y = "Country", by.x = "Country and regions")

或使用inner_join来自dplyr

library(dplyr)

extractedLifeData %>% select(1, 5, 7) %>%
     inner_join(extractedPensionData %>% select(1:3), 
                by = c("Country and regions" = "Country"))
于 2019-05-26T12:25:30.480 回答