2012-11-27 16 views
8

Ho un file documento XML. La parte del file è simile al seguente:come creare un frame di dati R da un file 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> 

Da questo file XML, voglio creare una cornice di dati R con le colonne di attrlabl, attrdef, attrtype e attrdomv. Si noti che la colonna attrdomv dovrebbe includere tutti i livelli per la variabile category. La cornice di dati dovrebbe essere simile a questo:

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

Ho un codice incompleto come questo:

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

La prego di completare il mio codice R? Apprezzo qualsiasi aiuto!

+1

puoi fornire un file xml valido per favore? – agstudy

+0

@agstudy: potresti dirmi come inviare il mio file xml? – POTENZA

+0

non è possibile qui, ma è possibile utilizzare un servizio di upload di file come SkyDrive e postare il collegamento file agstudy

risposta

9

Supponendo che questa è la corretta taxlots.shp.xml del 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> 

Si erano quasi arrivati:

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 

Ma l'ultimo campo non ha il formato che si voleva. Per fare ciò, richiede alcuni passaggi aggiuntivi:

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

upvote coz grazioso e più corto di xpathSApply! – agstudy

Problemi correlati