2015-01-20 1 views
0

이 XML 테이블을 구문 분석하려고하지만 "var"노드의 수를 계산하는 데 문제가 있습니다. 내 코드는 지금까지 아래와 같습니다. 16597을 일반화 할 수있는 값으로 대체하여 다른 유사한 테이블에도이 코드를 사용할 수 있기를 바랍니다. XPath가 아닌 R에서이 작업을 수행해야합니다. R 노드에있는 XML 노드 계산

require(RCurl) 
require(XML) 
url = "http://api.census.gov/data/2000/sf3/variables.xml" 
doc = xmlParse(url) 
root = xmlRoot(doc) 
xml.data = xmlToList(doc) 

id = NULL 
label = NULL 
concept = NULL 
for(i in 1:16597){ 
    id[i] = xml.data[[1]][[(i+2)]][["id"]] 
    label[i] = xml.data[[1]][[(i+2)]][["label"]] 
    concept[i] = xml.data[[1]][[(i+2)]][["concept"]] 
} 

scraped.data = data.frame(id, label, concept) 

나는이 this question의 기반으로 시도했지만 0

doc <- xmlTreeParse(url) 
xpathApply(xmlRoot(doc),path="count(//vars)",xmlValue) 

내 오해가있어?

+0

제공된 링크를 다운로드 할 수 없습니다. 어쨌든'for (i in 1 : (length (xml.data [1]) - 2))'work? – nicola

+0

RCurl을로드 했습니까? – Nancy

+0

물론. 브라우저에서도 링크를 열 수 없습니다. – nicola

답변

1

루프를 피하고 목록을 "rbind"할 수 있습니다.

y <- ldply(xml.data[[1]], "rbind") 
dim(y) 
[1] 16599  6 
head(y) 
    .id  id                                 label 
1 var  for                           Census API FIPS 'for' clause 
2 var  in                           Census API FIPS 'in' clause 
3 var PCT022034    Total: Not living in an MSA/PMSA in 2000: Different house in 1995: In United States in 1995: In an MSA/PMSA in 1995: 
4 var PCT022035 Total: Not living in an MSA/PMSA in 2000: Different house in 1995: In United States in 1995: In an MSA/PMSA in 1995: Central city 
5 var PCT022032                 Total: Not living in an MSA/PMSA in 2000: Different house in 1995: 
6 var PCT022033          Total: Not living in an MSA/PMSA in 2000: Different house in 1995: In United States in 1995: 
+0

감사합니다. btw '라이브러리 (plyr)'상단에 도움이 될 것입니다. – cainesap