2014-06-06 17 views
0

如何将此xml中的数据“http://api.sportsdatallc.org/nfl-t1/2013/REG/1/statistics.xml?api_key=4dhyq3f3rfkp2cbm4yqbcuag”转换为表格。XML到表R

我有这样的代码,到目前为止,和R正确读取XML文件...但我希望把它变成一个表,使我更容易分析:

library(XML) 
fileURL <- "http://api.sportsdatallc.org/nfl-t1/2013/REG/1/statistics.xml?api_key=4dhyq3f3rfkp2cbm4yqbcuag" 
doc <- xmlTreeParse(fileURL, useInternal = TRUE) 
rootNode <- xmlRoot(doc) 
xmlName(rootNode) 

当我使用xmlToDataFrame,我得到没有值的数据框...我尝试了几种方法,但都没有工作。任何人都可以帮忙吗?

+0

为例数据不是表格形式。您是否可以详细说明“我想将它变成表格” – jdharrison

回答

1

您可以使用xmlToListXML变成R列表。数据不是可以随时转换为表格的形式。您需要以表格形式进一步阐述需要的数量。

library(XML) 
fileURL <- "http://api.sportsdatallc.org/nfl-t1/2013/REG/1/statistics.xml?api_key=4dhyq3f3rfkp2cbm4yqbcuag" 
xData <- xmlParse(fileURL) 
appData <- xmlToList(xData) 
> names(appData[[1]][[1]]) 
[1] "touchdowns"    "third_down_efficiency" "rushing"    
[4] "redzone_efficiency"  "receiving"    "punting"    
[7] "punt_return"   "penalty"    "passing"    
[10] "kickoffs"    "goal_efficiency"  "fumbles"    
[13] "fourth_down_efficiency" "first_downs"   "extra_point"   
[16] "defense"    ".attrs" 

作为指导您在提取数据的段成表格的形式,我们可以看看在数据集和防御统计的第一场比赛由球员为一线队

library(XML) 
fileURL <- "http://api.sportsdatallc.org/nfl-t1/2013/REG/1/statistics.xml?api_key=4dhyq3f3rfkp2cbm4yqbcuag" 
xData <- xmlParse(fileURL) 
defData <- xpathApply(xData, 
         path = "//ns:games/ns:game[1]/ns:team[1]/ns:defense/ns:player" 
         , namespaces= c(ns = "http://feed.elasticstats.com/schema/nfl/statistics-v1.0.xsd") 
         , xmlToList) 
outData <- do.call(rbind.data.frame, defData) 
names(outData) <- names(defData[[1]]) 
head(outData) 

> head(outData) 
            id    name jersey position tackle ast comb tlost sack 
1 06b8c3d2-0d20-452e-86fc-69a7a269cd44 Kevin Vickerson  99  DT  2 0 2  1 0.0 
2 99149c69-e14f-4e05-9c3a-8ae7e3b1f00b  Aaron Brewer  46  LS  0 0 0  0 0.0 
3 d15dacdb-17c6-4010-83d1-e332f9610422 Sylvester Williams  92  DT  1 0 1  1 0.0 
4 ca6c6bb5-9ab9-4b4c-a507-36c9dbd7738e  Nate Irving  56  LB  3 1 4  1 0.0 
5 252da24d-9eb7-4871-ae76-199918f412d8  Malik Jackson  97  DE  0 1 1  0 0.0 
6 d867198a-36ec-4a99-9037-a093216f99d8  Mitch Unrein  96  DT  1 0 1  0 0.0 
    sack_yds sfty int int_yds int_lg int_td force_fum fum_rec fum_td qh pd bk sp_tackle sp_ast sp_comb 
1  0.0 0 0  0  0  0   0  0  0 0 0 0   0  0  0 
2  0.0 0 0  0  0  0   0  0  0 0 0 0   1  0  1 
3  0.0 0 0  0  0  0   0  0  0 0 0 0   0  0  0 
4  0.0 0 0  0  0  0   0  0  0 0 0 0   0  0  0 
5  0.0 0 0  0  0  0   0  0  0 0 0 0   0  0  0 
6  0.0 0 0  0  0  0   0  0  0 0 0 0   0  0  0 
    sp_force_fum sp_fum_rec misc_tackle misc_ast misc_comb misc_force_fum misc_fum_rec 
1   0   0   0  0   0    0   0 
2   0   0   0  0   0    0   0 
3   0   0   0  0   0    0   0 
4   0   0   0  0   0    0   0 
5   0   0   0  0   0    0   0 
6   0   0   0  0   0    0   0 
+0

我试图运行您的代码,并且出现此错误:“UseMethod(”xpathApply“)中的错误: 没有适用于将'xpathApply'应用于对象的方法类“字符”“ – fmolino

+0

@ user2963483有一个错字'doc'已被更改为'path'并且代码现在应该可以工作 – jdharrison