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

如何在R中从nhlapi嵌套列表提取游戏信息生成数据框

提取NHL赛事嵌套列表生成统一数据框的解决方案

问题背景

使用R语言的nhlapi包调用nhl_schedule_seasons(2023)获取2023赛季NHL赛事信息,返回嵌套列表结构,其中dates下的games列表包含各场比赛的子数据框。此前尝试用purrr映射或循环提取时,要么无法合并为统一数据框,要么因子数据框列数不匹配报错:

Error in rbind(deparse.level, ...) : 
  numbers of columns of arguments do not match

正确解决方案

核心问题是不同场次的子数据框可能存在列数差异,需要在合并时自动填充缺失列。以下是两种简洁的实现方式:

方法一:结合pluck、list_flatten与list_rbind

library(nhlapi)
library(purrr)
library(dplyr)

# 获取赛程数据
schedule <- nhl_schedule_seasons(2023)

# 提取并合并所有比赛数据
game_df <- schedule %>%
  pluck("dates") %>%          # 提取顶层的dates列表
  map("games") %>%            # 从每个日期条目里提取games子列表
  list_flatten() %>%          # 将嵌套的games列表展平为单层列表
  list_rbind(fill = TRUE)     # 合并所有子数据框,自动为缺失列填充NA

方法二:使用map_dfr批量处理

library(nhlapi)
library(purrr)
library(dplyr)

schedule <- nhl_schedule_seasons(2023)

game_df <- schedule %>%
  pluck("dates") %>%
  map_dfr(function(date_item) {
    # 对每个日期的games列表进行合并,再按行绑定所有日期的结果
    date_item$games %>% list_rbind(fill = TRUE)
  })

错误原因说明

之前循环报错是因为不同场次的子数据框列数不一致,rbind()要求所有输入数据框列数完全匹配,而list_rbind(fill = TRUE)或bind_rows(fill = TRUE)会自动处理这种差异,为缺失的列填充NA值,从而避免报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 10:59:55