Ето едно решение. Следва обяснение.
library(rvest)
library(tidyverse)
read_html(url) %>%
html_nodes("table") %>%
html_table(header = T) %>%
simplify() %>%
first() %>%
setNames(paste0(colnames(.), as.character(.[1,]))) %>%
slice(-1)
Изход от glimpse()
:
Observations: 25
Variables: 16
$ Rank <chr> "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"…
$ Player <chr> "Lamar Jackson QB - BAL", "Dak Prescott QB - DAL", "Deshaun W…
$ Opp <chr> "@MIA", "NYG", "@NO", "@ARI", "@JAX", "@PHI", "PIT", "WAS", "…
$ PassingYds <chr> "324", "405", "268", "385", "378", "380", "341", "313", "248"…
$ PassingTD <chr> "5", "4", "3", "3", "3", "3", "3", "3", "3", "3", "2", "2", "…
$ PassingInt <chr> "-", "-", "1", "-", "-", "-", "-", "-", "-", "1", "1", "1", "…
$ RushingYds <chr> "6", "12", "40", "22", "2", "-", "-", "5", "24", "6", "13", "…
$ RushingTD <chr> "-", "-", "1", "-", "-", "-", "-", "-", "-", "-", "-", "-", "…
$ ReceivingRec <chr> "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "…
$ ReceivingYds <chr> "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "…
$ ReceivingTD <chr> "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "…
$ RetTD <chr> "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "…
$ MiscFumTD <chr> "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "…
$ Misc2PT <chr> "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "1", "-", "…
$ FumLost <chr> "-", "-", "-", "1", "-", "-", "-", "-", "-", "-", "-", "-", "…
$ FantasyPoints <chr> "33.56", "33.40", "30.72", "27.60", "27.32", "27.20", "25.64"…
Обяснение
От ?html_table
документа:
html_table
в момента прави няколко предположения:
- Нито една клетка не обхваща няколко реда
- Заглавките са на първия ред
Част от проблема ви се решава чрез настройка на header = TRUE
в html_table()
.
Друга част от проблема е, че заглавните клетки обхващат два реда, което html_table()
не очаква.
Ако приемем, че не искате да загубите информацията в нито един от заглавните редове, можете:
- Използвайте
simplify
и first
, за да извадите рамката с данни от списъка, който получавате от html_table
- Използвайте
setNames
, за да обедините двата заглавни реда (които сега са колоните на рамката с данни и първия ред)
- Премахнете първия ред (вече излишен) с
slice
person
andrew_reece
schedule
15.02.2020
html_table() %>% as.data.frame
преобразува списъка в рамка с данни. След това можете да използвате slice(), ако искате. - person jazzurro   schedule 15.02.2020