Я создаю график, который соотносит возраст ожидаемой продолжительности жизни и пенсионный возраст для каждой страны. Я использовал пакеты веб-скрейпинга для очистки 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)
Это объединяет два набора данных в один и не удаляет регионы, а просто объединяет «Страну» со страной и регионами». Из-за этого не будет данных о пенсиях для регионов. Я только хочу сохранить страны.
Мне не ясно, как будет выглядеть ваш ожидаемый результат? Сколько и какие столбцы он будет иметь? extractedLifeData[extractedLifeData$`Country and regions` %in% extractedPensionData$Country, ] удаляет строки, которых нет в столбце Country.
Результат предназначен для отображения следующих столбцов. «Страна», «Мужчины», «Женщины» (из извлеченныхPensionData) и «Продолжительность жизни мужчин», «Продолжительность жизни женщин» (из извлеченныхLifeData).
merge(extractedLifeData[c(1, 5, 7)], extractedPensionData[1:3], by.y = "Country", by.x = "Country and regions") . это?
Отлично, если вы укажете это в ответе, я отмечу как решенное





Мы можем использовать 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"))
Мы можем использовать соединение с data.table
library(data.table)
setDT(extractedLifeData[c(1, 5, 7)][extractedPensionDate[1:3],
on = .(Country = `Country and regions`)]
это помогает?
merge(extractedLifeData, extractedPensionData, by.y = "Country", by.x = "Country and regions", all = TRUE)