Судя по выходным данным примера OP, они хотят, чтобы таблица была предоставлена с другим xpath, чем тот, который они предоставили в вопросе. См. Следующий рабочий процесс, обратите внимание: имена были заданы вручную, чтобы не беспокоиться о форматировании строк из строк:
# Initialise package in session: rvest => .GlobalEnv()
library(rvest)
# Store the url scalar: url => character vector
url <- "https://en.wikipedia.org/wiki/New_York_City"
# Scrape the table and store it memory: nyc => data.frame
nyc <-
url %>%
read_html() %>%
html_node(xpath = '/html/body/div[3]/div[3]/div[4]/div/table[3]') %>%
html_table(fill = TRUE) %>%
data.frame()
# Set the names appropriately: names(nyc) character vector
names(nyc) <- c("borough", "county", "pop_est_2019",
"gdp_bill_usd", "gdp_per_cap",
"land_area_sq_mi", "land_area_sq_km",
"density_pop_sq_mi", "density_pop_sq_km")
# Coerce the vectors to the appropriate type: cleaned => data.frame
cleaned <- data.frame(lapply(nyc[4:nrow(nyc)-1,], function(x){
if(length(grep("\\d+\\,\\d+$|^\\d+\\.\\d+$", x)) > 0){
as.numeric(trimws(gsub("\\,", "", as.character(x)), "both"))
}else{
as.factor(x)
}
}
)
)