Проблема кодирования с использованием rvest для получения координат в R? - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь получить десятичные координаты из таблицы в Википедии. Приведенный ниже код помогает мне получить столбец для широты и столбец для долготы, но мне не удается на последнем этапе преобразования столбца longitude из символа в число c. Напротив, столбец latitude преобразуется нормально.

Кажется, что проблема заключается в «скрытом» символе в конце каждой строки в столбце longitude (str_length «считает» один дополнительный символ, чем виден в столбце значений).

Это проблема кодирования? Как преобразовать столбец longitude в число c?

Этот код, кажется, дает мне большую часть пути:

# load packages
library(xml2)
library(rvest)
library(dplyr)
library(stringr)
library(tidyr)
library(readr)

# get coordinates data
webpage_url <- "https://en.wikipedia.org/wiki/List_of_Premier_League_stadiums"
webpage <- xml2::read_html(webpage_url)

# put web data into dataframe
df1 <- rvest::html_table(webpage, fill = TRUE)[[1]] 

df2 <- df1 %>% 
  # split different coordinate formats
  mutate(temp_Coordinates = str_split(string = Coordinates, pattern = " / ")) %>% 
  # one coordinate format per row
  unnest(cols = temp_Coordinates) %>% 
  group_by(Stadium) %>% 
  # keep only 3rd row per stadium, i.e. decimal format of coordinates
  filter(row_number() == 3) %>% 
  ungroup() %>%
  # seperate coordinate pairs into individual columns for latitude and longitude
  separate(temp_Coordinates, c("latitude","longitude"), sep = " ") %>% 
  # remove semi-colon from end of latitude string
  mutate(latitude = str_replace(latitude, ";", ""))

Проблема, похоже, заключается в этом последнем шаге, преобразовании longitude из символа в число c (в результате вместо этого в столбце NA):

df3 <- df2 %>% 
  # convert latitude from character to numeric 
  mutate(latitude = as.numeric(latitude)) %>% 
  # convert longitude from character to numeric
  mutate(longitude = as.numeric(longitude))

Ручное назначение значения для копирования и вставки из longitude возвращает эту ошибку (обратите внимание на появление странного символа вопросительного знака при вставке строки в консоль). );

x <- "-2.96083�" Ошибка: EOF при чтении символа MBCS в строке 2 </p>

Кто-нибудь знает, как изменить формат, чтобы я мог преобразовать в число c?

Спасибо!

1 Ответ

1 голос
/ 02 мая 2020

Вы можете извлекать значения из другого набора узлов и назначать их фрейму данных

library(rvest)
library(magrittr)

webpage_url <- "https://en.wikipedia.org/wiki/List_of_Premier_League_stadiums"
webpage <- read_html(webpage_url) 
df1 <- webpage %>% html_node('table') %>% html_table(fill = T)
geos <- webpage %>% html_nodes('.geo') %>% html_text() %>% str_split_fixed(., ';',2)
df1$latitude <- geos[, 1] %>% as.double()
df1$longitude <- geos[, 2] %>% as.double()

print(head(df1,1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...