2012-11-27 38 views
8

Tôi có tệp Tài liệu XML. Một phần của tập tin trông như thế này:cách tạo khung dữ liệu R từ tệp xml

-<attr> 
    <attrlabl>COUNTY</attrlabl> 
    <attrdef>County abbreviation</attrdef> 
    <attrtype>Text</attrtype> 
    <attwidth>1</attwidth> 
    <atnumdec>0</atnumdec> 
    -<attrdomv> 
     -<edom> 
      <edomv>C</edomv> 
      <edomvd>Clackamas County</edomvd> 
      <edomvds/> 
     </edom> 
     -<edom> 
      <edomv>M</edomv> 
      <edomvd>Multnomah County</edomvd> 
      <edomvds/> 
     </edom> 
     -<edom> 
      <edomv>W</edomv> 
      <edomvd>Washington County</edomvd> 
      <edomvds/> 
     </edom> 
    </attrdomv> 
</attr> 

Từ tập tin XML này, tôi muốn tạo một khung dữ liệu R với các cột của attrlabl, AttrDef, attrtype, và attrdomv. Xin lưu ý rằng cột attrdomv phải bao gồm tất cả các cấp cho biến thể loại. Khung dữ liệu sẽ trông như thế này:

attrlabl attrdef    attrtype attrdomv 
COUNTY  County abbreviation Text  C Clackamas County; M Multnomah County; W Washington County 

Tôi có một mã số không đầy đủ như thế này:

doc <- xmlParse("taxlots.shp.xml") 
dataDictionary <- xmlToDataFrame(getNodeSet(doc,"//attrlabl")) 

Ông có thể hoàn thành đang R của tôi? Tôi đánh giá cao sự giúp đỡ nào!

+1

bạn có thể cung cấp tệp xml hợp lệ không? – agstudy

+0

@agstudy: bạn có thể cho tôi biết cách gửi tệp xml của tôi cho bạn không? – POTENZA

+0

bạn không thể ở đây, nhưng bạn có thể sử dụng một dịch vụ tải lên tệp như SkyDrive và đăng liên kết file agstudy

Trả lời

9

Giả sử đây là đúng taxlots.shp.xml file:

<attr> 
    <attrlabl>COUNTY</attrlabl> 
    <attrdef>County abbreviation</attrdef> 
    <attrtype>Text</attrtype> 
    <attwidth>1</attwidth> 
    <atnumdec>0</atnumdec> 
    <attrdomv> 
     <edom> 
      <edomv>C</edomv> 
      <edomvd>Clackamas County</edomvd> 
      <edomvds/> 
     </edom> 
     <edom> 
      <edomv>M</edomv> 
      <edomvd>Multnomah County</edomvd> 
      <edomvds/> 
     </edom> 
     <edom> 
      <edomv>W</edomv> 
      <edomvd>Washington County</edomvd> 
      <edomvds/> 
     </edom> 
    </attrdomv> 
</attr> 

Bạn gần như có:

doc <- xmlParse("taxlots.shp.xml") 
xmlToDataFrame(nodes=getNodeSet(doc1,"//attr"))[c("attrlabl","attrdef","attrtype","attrdomv")] 
    attrlabl    attrdef attrtype            attrdomv 
1 COUNTY County abbreviation  Text CClackamas CountyMMultnomah CountyWWashington County 

Nhưng trường cuối cùng đã không phải là định dạng mà bạn muốn. Để làm như vậy, yêu cầu một số bước bổ sung:

step1 <- xmlToDataFrame(nodes=getNodeSet(doc1,"//attrdomv/edom")) 
step1 
    edomv   edomvd edomvds 
1  C Clackamas County   
2  M Multnomah County   
3  W Washington County 

step2 <- paste(paste(step1$edomv, step1$edomvd, sep=" "), collapse="; ") 
step2 
[1] "C Clackamas County; M Multnomah County; W Washington County" 

cbind(xmlToDataFrame(nodes= getNodeSet(doc1, "//attr"))[c("attrlabl", "attrdef", "attrtype")], 
     attrdomv= step2) 
    attrlabl    attrdef attrtype              attrdomv 
1 COUNTY County abbreviation  Text C Clackamas County; M Multnomah County; W Washington County 
+0

lên trên coz khá và ngắn hơn xpathSApply! – agstudy

Các vấn đề liên quan