You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R爬取NAIA棒球数据生成18个tibbles,合并后行数异常求助

解决NAIA棒球数据合并后队伍重复的问题

你遇到的核心问题是:页面返回的18个tibble并非独立数据集,而是同一199支队伍的不同统计维度表格——每个表格都包含199行(对应所有队伍)和专属统计列。bind_rows()会将表格按行堆叠,自然导致队伍重复18次,大量NA值则来自各表格独有的列在其他表格中不存在。

正确合并方式:按队伍列横向拼接

需要将所有表格按队伍名称横向整合,把同一队伍的所有统计项归到同一行。以下是两种可靠实现方式:

方法1:purrr::reduce + full_join(推荐,适配队伍顺序不一致场景)

该方法会自动按队伍名称匹配,即使不同表格的队伍排序有差异也能正确合并:

library(dplyr)
library(rvest)
library(purrr)

url <- "https://naiastats.prestosports.com/sports/bsb/2022-23/teams"

page <- read_html(url)
data_tables <- page %>% html_nodes("table") %>% html_table()

# 统一所有表格的第一列(队伍列)名称为"Team"
data_tables <- map(data_tables, ~rename(.x, Team = 1))

# 按Team列逐步合并所有表格
combined_data <- reduce(data_tables, full_join, by = "Team")

方法2:bind_cols(仅当所有表格队伍顺序完全一致时使用)

若确认所有表格的队伍排序完全相同,可直接移除重复队伍列后横向拼接:

library(dplyr)
library(rvest)
library(purrr)

url <- "https://naiastats.prestosports.com/sports/bsb/2022-23/teams"

page <- read_html(url)
data_tables <- page %>% html_nodes("table") %>% html_table()

# 提取第一个表格的队伍列作为主列
team_column <- data_tables[[1]][, 1]
# 移除所有表格中的队伍列
tables_without_team <- map(data_tables, ~select(.x, -1))

# 拼接队伍列和所有统计列
combined_data <- bind_cols(team_column, tables_without_team)

结果验证

合并完成后,运行nrow(combined_data)应返回199,每个队伍的所有统计数据会集中在同一行,NA值仅出现在该队伍确实无对应统计项的位置。

内容的提问来源于stack exchange,提问作者jhuff52

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 11:27:10