gpt4 book ai didi

xml - 将不均匀的层次列表转换为数据框

转载 作者:数据小太阳 更新时间:2023-10-29 02:23:01 24 4
gpt4 key购买 nike

我认为这还没有被问到,但是有没有办法将多层次和结构不均匀的列表信息组合成“长”格式的数据框?

具体来说:

library(XML)
library(plyr)
xml.inning <- "http://gd2.mlb.com/components/game/mlb/year_2009/month_05/day_02/gid_2009_05_02_chamlb_texmlb_1/inning/inning_5.xml"
xml.parse <- xmlInternalTreeParse(xml.inning)
xml.list <- xmlToList(xml.parse)
## $top$atbat
## $top$atbat$pitch
## des id type x y
## "Ball" "310" "B" "70.39" "125.20"

结构如下:

> llply(xml.list, function(x) llply(x, function(x) table(names(x))))
$top
$top$atbat
.attrs pitch
1 4
$top$atbat
.attrs pitch
1 4
$top$atbat
.attrs pitch
1 5
$bottom
$bottom$action
b des event o pitch player s
1 1 1 1 1 1 1
$bottom$atbat
.attrs pitch
1 5
$bottom$atbat
.attrs pitch
1 5
$bottom$atbat
.attrs pitch runner
1 5 1
$bottom$atbat
.attrs pitch runner
1 7 1
$.attrs
$.attrs$num
character(0)
$.attrs$away_team
character(0)
$.attrs$

我想要的是来自 pitch 类别的命名向量的数据框,以及适当的(topatbat ,<强>底部 )。因此,由于列数不同,我需要忽略不适合 data.frame 的级别。像这样:

   first second third    des     x
1 top atbat pitch Ball 70.29
2 top atbat pitch Strike 69.24
3 bottom atbat pitch Out 67.22

有没有一种优雅的方式来做到这一点?谢谢!

最佳答案

我不知道优雅,但这行得通。那些更熟悉 plyr 的人可能会提供更通用的解决方案。

cleanFun <- function(x) {
a <- x[["atbat"]]
b <- do.call(rbind,a[names(a)=="pitch"])
c <- as.data.frame(b)
}
ldply(xml.list[c("top","bottom")], cleanFun)[,1:5]
.id des id type x
1 top Ball 310 B 70.39
2 top Called Strike 311 S 118.45
3 top Called Strike 312 S 86.70
4 top In play, out(s) 313 X 79.83
5 bottom Ball 335 B 15.45
6 bottom Called Strike 336 S 77.25
7 bottom Swinging Strike 337 S 99.57
8 bottom Ball 338 B 106.44
9 bottom In play, out(s) 339 X 134.76

关于xml - 将不均匀的层次列表转换为数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3409583/

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