2015-06-16 2 views
0

Я использую R для извлечения данных из XML, который выглядит следующим образом («atbat» является более узлом, чем «поле»):извлечение XML с R

<atbat num="1" b="2" s="2" o="1" start_tfs="173619" start_tfs_zulu="2014-06- 
01T17:36:19Z" batter="543706" stand="R" b_height="5-8" pitcher="543699" 
p_throws="R" des="Daniel Robertson grounds out to first baseman Adam 
LaRoche. 
    <pitch des="Ball" des_es="Bola mala" id="3" type="B" tfs="173525" 
    tfs_zulu="2014-06-01T17:35:25Z" x="129.61" y="114.84" event_num="3" 
    sv_id="140601_133543" play_guid="" start_speed="90.8" end_speed="84.1" 

Я использую следующую функцию R и вызов чтобы извлечь все данные, связанные с веревок (это данные бейсбол):

grabXML <- function(XML.parsed, field){ 
    parse.field <- getNodeSet(XML.parsed, paste("//", field, sep="")) 
    results <- t(sapply(parse.field, function(x) xmlAttrs(x))) 
    if(typeof(results)=="list"){ 
    do.call(rbind.fill, lapply(lapply(results, t), data.frame, 
    stringsAsFactors=F)) 
} 
else { 
    as.data.frame(results, stringsAsFactors=F) 
} 
} 

xmlGame <- xmlParse(URL) 
grabXML(xmlGame, "pitch") 

функция делает именно то, что я хочу, за исключением того, что она возвращает все данные основного тона для игры. Я хотел бы иметь возможность указать идентификатор кувшина (обратите внимание, что кувшины идентифицируются шестизначным числом в XML) и функция возвращает только данные шага. Мне интересно, нужен ли мне цикл «для», или если проблема с идентификатором питчера в более высоком узле вызовет проблему.

ответ

0

Считаете ли вы использование XML -пакетов? Вы бы использовали его следующим образом:

library(XML) 
xml.content <- xmlParse("file.xml") 
# maneuver to the right node here 
xml.content <- xmlRoot(xml.content) 

# get the attributes 
attrs <- xmlAttrs(xml.content) 
attrs["pitch"] 
Смежные вопросы