2014-02-14 3 views
0

R에서 file을 읽으려고합니다. XML package을 사용하려했지만 데이터 세트에 무엇이 있는지 전혀 모르기 때문에 패키지를 사용하지 않았습니다.R에있는 XML 데이터 읽기

여러분의 도움을 부탁드립니다.

감사합니다.

세바스찬.

+4

http://stackoverflow.com/questions/17198658/how-to-parse-xml-to-r-data-frame – user2510479

답변

4

주위를 둘러 볼 방법이 없습니다. R에서 XML과 XPath를 이해해야합니다. 브라우저에서 문서를보고 구조에 대한 아이디어를 얻으십시오. 그런 다음 XML 패키지를 사용하여 시작해야합니다.

library(XML) 
xml <- xmlParse("http://data.mcc.gov/raw/xml/MCC_HN.xml") 

org  <- xpathApply(xml,"//iati-activity/reporting-org",xmlValue) 
id   <- xpathApply(xml,"//iati-activity/iati-identifier",xmlValue) 
title  <- xpathApply(xml,"//iati-activity/title",xmlValue) 
desc.1  <- xpathApply(xml,"//iati-activity/description[@type='1']",xmlValue) 
desc.2  <- xpathApply(xml,"//iati-activity/description[@type='2']",xmlValue) 
status  <- xpathApply(xml,"//iati-activity/activity-status",xmlValue) 
start.planned <- xpathApply(xml,"//iati-activity/activity-date[@type='start-planned']",xmlValue) 
start.actual <- xpathApply(xml,"//iati-activity/activity-date[@type='start-actual']",xmlValue) 
end.planned <- xpathApply(xml,"//iati-activity/activity-date[@type='end-planned']",xmlValue) 
end.actual <- xpathApply(xml,"//iati-activity/activity-date[@type='end-actual']",xmlValue) 

df <- data.frame(cbind(org,id, title, status, 
         start.planned, start.actual, end.planned, end.actual, 
         desc.1, desc.2)) 

위의 기능에 대한 설명서를 읽으십시오. xmlParse(...), xpathApply(...)xmlValue(...)을 사용하여 코드가하는 작업을 이해할 수 있습니다.

참고 : XML 패키지에는 xmlToDataFrame(...) 기능이 있습니다. 문서의 문제는 type= 속성을 사용하여 동일한 태그 이름 (예 : descriptionactivity-date)을 가진 여러 요소가 명확하게 구분되어 있다는 것입니다. xmlToDataFrame(...)는 처리하는 방법을 알고하지 않습니다, 그래서 당신은

+0

당신은 내부에 어떤 변수 알고 했는가 방법 XML 데이터? 당신은 도움이 매우 편리했습니다. 감사! – user3311904

+0

기본적으로 브라우저에서 파일을 볼 필요가 있습니다. 프로그래밍 방식으로 태그 이름의 목록을 볼 수 있지만 브라우저에서보기가 가장 쉽습니다. – jlhoward

0

그것은 당신이 데이터에 대해 수행 할 작업 정말 분명하지 않다, 그러나 여기에서 우리가

xml = xmlParse("http://data.mcc.gov/raw/xml/MCC_HN.xml") 
을 얻을 ... 그것은 어려운 방법을 할 필요가

모든 "거래"기록에 대한 결과를 쿼리와 데이터 프레임

df <- xmlToDataFrame(xml["//transaction"]) 

로 만들

> dim(df) 
[1] 730 11 
> head(df, 2) 
    aid-type 
1   
2   
                   description 
1 Commitment: Honduras-614G Fund-Not Applicable-Not Applicable-2011-04-01 
2 Disbursement: Honduras-614G Fund-Not Applicable-Not Applicable-2011-04-01 
    disbursement-channel finance-code flow-type      provider-org 
1            Millennium Challenge Corporation 
2            Millennium Challenge Corporation 
    receiver-org tied-status transaction-date transaction-type  value 
1  Honduras     2011-04-01  COMMITMENT 274380.75 
2  Honduras     2011-04-01  DISBURSEMENT  0.00 

'aid-type'과 관련된 속성을 추출하여 데이터 프레임에 추가하고 싶을 수 있습니다. 할 XPath를 사용하므로

df$`aid-type-code` <- as.character(xml["//aid-type/@code"])