gpt4 book ai didi

r - 使用 R 从网页中提取表格

转载 作者:行者123 更新时间:2023-12-02 20:04:27 26 4
gpt4 key购买 nike

我正在尝试从 this page 中提取所有表格使用R,对于html_node我已经传递了“table”。在控制台中,输出很奇怪。数据在网页中可用,但在 R 控制台中显示 NA。请建议我哪里犯了错误。

library(xml2)
library(rvest)
url <- "https://www.iii.org/table-archive/21110"
page <- read_html(url) #Creates an html document from URL
table <- html_table(page, fill = TRUE) #Parses tables into data frames
table

部分输出: X4 X5 X6

  1  Direct premiums written (1) Market share (2)  1
2 Market share (2) <NA> NA
3 10.6% <NA> NA
4 6.0 <NA> NA
5 5.4 <NA> NA
6 5.4 <NA> NA
7 5.2 <NA> NA
8 4.5 <NA> NA
9 3.3 <NA> NA
10 3.2 <NA> NA
11 3.0 <NA> NA
12 2.2 <NA> NA
X7 X8 X9 X10
1 State Farm Mutual Automobile Insurance $51,063,111 10.6% 2
2 <NA> <NA> <NA> NA
3 <NA> <NA> <NA> NA
4 <NA> <NA> <NA> NA
5 <NA> <NA> <NA> NA
6 <NA> <NA> <NA> NA
7 <NA> <NA> <NA> NA
8 <NA> <NA> <NA> NA
9 <NA> <NA> <NA> NA
10 <NA> <NA> <NA> NA
11 <NA> <NA> <NA> NA
12 <NA> <NA> <NA> NA

最佳答案

这会将所有表放入一个数据框中:

library(tidyverse)
library(rvest)


url <- "https://www.iii.org/table-archive/21110"

df <- url %>%
read_html() %>%
html_nodes("table") %>%
html_table(fill = T) %>%
lapply(., function(x) setNames(x, c("Rank", "Company", "Direct_premiums_written",
"Market_share")))

tables <- data.frame()

for (i in seq(2,18,2)) {
temp <- df[[i]]
tables <- bind_rows(tables, temp)
}

然后您可以根据需要将其子集化。例如,让我们从代表 2009 年的第三个表中提取信息:

table_2009 <- tables[21:30,] %>% 
mutate(Year = 2009)

一次性添加所有年份:

years <- c(2017, 2008, 2009, 2010, 2011, 2013, 2014, 2015, 2016)
tables <- tables %>%
mutate(Year = rep(years, each = 10))

希望这有帮助。

关于r - 使用 R 从网页中提取表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55092329/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com