Создание фрейма данных из плохо сохраненных данных списка (удаление первой строки, которая является ненужной) - PullRequest
0 голосов
/ 01 апреля 2019

Наш профессор продолжает давать нам задания для работы в R, но вместо того, чтобы давать нам более простые данные, которые мы обычно получаем из Интернета.

Этот блок кода делает это:

library(rvest)
url <- "https://www.supremecourt.gov/opinions/slipopinion/18"
page <- read_html(url)
table <- html_table(page, fill = FALSE, trim = TRUE)

Однако это также включается в данные таблицы:

таблица [[1]] X1 1 ПОИСК СОВЕТОВ \ r \ n Поиск слишком короткий термин \ r \ n Неверный текст в поисковой фразе. Попробуйте снова X2 1 РАСШИРЕННЫЙ ПОИСК ПОИСК

Так что мне трудно понять, как отформатировать эти данные в фрейм данных, потому что выполнение чего-то вроде as.data.frame(table) дает мне эту ошибку,

Ошибка в (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE,: аргументы подразумевают различное количество строк: 1, 11, 8, 7, 2

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Вы можете использовать селектор, чтобы отличать таблицы с данными от других таблиц на странице, таких как поле поиска.В этом случае таблицы данных относятся к классу table-bordered:

page %>% 
  html_nodes("table.table-bordered") %>% 
  html_table()
0 голосов
/ 01 апреля 2019

Я думаю, мы можем подойти к нему двумя способами.Если вы уверены, что возникает только первый тип ошибки, вы можете выполнить поиск Search term too short по grepl и исключить любой элемент в списке table перед выполнением bind_rows.

library(dplyr)
table[unlist(lapply(
  table, 
  function(x) sum(grepl("Search term too short", x))
)) < 1] %>% 
  bind_rows()
* 1007.* В противном случае, поскольку другие «хорошие» элементы списка имеют одинаковые имена / формат столбцов, вы также можете использовать это.
table[unlist(lapply(
  table, 
  function(x) sum(grepl("Docket", names(x))) > 0
))] %>% 
  bind_rows()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...