提问人:Simms34 提问时间:9/29/2023 最后编辑:Simms34 更新时间:9/29/2023 访问量:59
将列表扩展为现有数据框中的列
Expanding lists as columns within an existing dataframe
问:
首先,我要说的是,我对R语言比较陌生,我是一个你可以称之为“蛮力”的学习者——我不学习这门语言,学习它,然后把它付诸实践。相反,我从适度的概念理解开始,然后通过谷歌和广泛的试验和错误相结合,为我试图完成的特定任务找到一个解决方案,并从每次经历中学习。因此,请原谅我的任何错误引用。但是我已经完成了当前任务的几个步骤,我发现自己现在已经接近尾声了。
底线问题是我有一个数据帧,其中包含几列包含列表,这些列表应该与其行中的 id 值相关联,但我不知道如何以我想要的方式将其全部解压缩。
# A tibble: 6 × 17
id start_date home_team away_team is_live is_popular sport league odds.1.sports_book_n…¹ odds.1.name odds.1.price odds.1.bet_points odds.1.is_main
<chr> <chr> <chr> <chr> <lgl> <lgl> <chr> <chr> <list> <list> <list> <list> <list>
1 3404… 2023-09-2… Los Ange… San Fran… FALSE FALSE base… MLB <chr [6]> <chr [6]> <int [6]> <dbl [6]> <lgl [6]>
2 1481… 2023-09-2… Washingt… Atlanta … FALSE FALSE base… MLB <chr [6]> <chr [6]> <int [6]> <dbl [6]> <lgl [6]>
3 1216… 2023-09-2… Philadel… New York… FALSE FALSE base… MLB <chr [28]> <chr [28]> <int [28]> <dbl [28]> <lgl [28]>
4 2568… 2023-09-2… San Dieg… St. Loui… FALSE FALSE base… MLB <chr [465]> <chr [465]> <int [465]> <dbl [465]> <lgl [465]>
5 4064… 2023-09-2… Oakland … Detroit … FALSE FALSE base… MLB <chr [64]> <chr [64]> <int [64]> <dbl [64]> <lgl [64]>
6 3854… 2023-09-2… Texas Ra… Seattle … FALSE FALSE base… MLB <chr [66]> <chr [66]> <int [66]> <dbl [66]> <lgl [66]>
# ℹ abbreviated name: ¹odds.1.sports_book_name
# ℹ 4 more variables: odds.1.is_live <list>, odds.1.market_name <list>, odds.1.selection <list>, odds.1.selection_line <list>
背景故事:我正在查询一个体育赔率 API,它要求我在请求中传递 GameID。到目前为止,我已经设法:
- 从 API 中检索可用游戏的列表
- 将该响应子集到 GameID 的数据帧中
- 创建并运行一个单独的 API 调用,该调用循环访问 GameID 并返回嵌套列表中的所有数据 -- 使用 map()
- 使用 rrapply() 解压缩初始结果以获得上面所示的 tibble。
我觉得在这一点上这应该相当简单,但是我无法搜索正确的关键字组合,这显然将我指向了对我的特定情况有帮助的现有讨论。我尝试了各种 unlist、rbind、map_* 和其他功能,但无济于事。
第 1:9 列是特定于游戏的详细信息,需要保留。第 10:17 列是包含特定市场/线路的所有列表,需要根据它们当前关联的游戏进行扩展。就其价值而言,所有列表列的长度都应该相同。
非常感谢任何和所有的帮助。
编辑以添加 dput(head())...我切断了它,因为即使使用 head(),它也限制为六行顶级行,而不是列表行,列表行会很长。其他列表列也类似,但我还添加了 df 的屏幕截图,以防万一。
structure(list(id = c("34048-80389-2023-09-24-16", "14818-36174-2023-09-24-15",
"12164-37900-2023-09-24-15", "25683-25135-2023-09-24-13", "40644-76765-2023-09-24-13",
"38548-10478-2023-09-24-11"), start_date = c("2023-09-24T19:00:00-04:00",
"2023-09-24T18:35:00-04:00", "2023-09-24T18:05:00-04:00", "2023-09-24T16:10:00-04:00",
"2023-09-24T16:07:00-04:00", "2023-09-24T14:35:00-04:00"), home_team = c("Los Angeles Dodgers",
"Washington Nationals", "Philadelphia Phillies", "San Diego Padres",
"Oakland Athletics", "Texas Rangers"), away_team = c("San Francisco Giants",
"Atlanta Braves", "New York Mets", "St. Louis Cardinals", "Detroit Tigers",
"Seattle Mariners"), is_live = c(FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE), is_popular = c(FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE), sport = c("baseball", "baseball", "baseball", "baseball",
"baseball", "baseball"), league = c("MLB", "MLB", "MLB", "MLB",
"MLB", "MLB"), odds.1.sports_book_name = list(c("FanDuel", "FanDuel",
"FanDuel", "FanDuel", "FanDuel", "FanDuel"), c("FanDuel", "FanDuel",
"FanDuel", "FanDuel", "FanDuel", "FanDuel"), c("FanDuel", "FanDuel",
"FanDuel", "FanDuel", "FanDuel", "FanDuel", "FanDuel", "FanDuel",
"FanDuel", "FanDuel", "FanDuel", "FanDuel", "FanDuel", "FanDuel",
"FanDuel", "FanDuel", "FanDuel", "FanDuel", "FanDuel", "FanDuel",
"FanDuel", "FanDuel", "FanDuel", "FanDuel", "FanDuel", "FanDuel",
"FanDuel", "FanDuel"), c("FanDuel", "FanDuel", "FanDuel", "FanDuel",
"FanDuel", "FanDuel", "FanDuel", "FanDuel", "FanDuel", "FanDuel",
"FanDuel", "FanDuel", "FanDuel", "FanDuel", "FanDuel", "FanDuel",
"FanDuel", "FanDuel", "FanDuel", "FanDuel", "FanDuel", "FanDuel",
答: 暂无答案
评论
dput(<your data frame>)
dput
tidyr::unnest(df, 10:17)