2016-11-06 11 views
1

ノードが同じ名前のXMLファイルがあり、データフレームを作成するために必要なデータを選択する方法がわかりません。私はRとXMLを初めて使っているので、動作させることができません!同じ名前の複数のノードがある場合にXMLからRへの解析

私のXMLは、この(ほんの始まり)のようになります。

<GL_Document xmlns=""> 
    <time_Period.timeInterval>...</time_Period.timeInterval> 
    <TimeSeries> 
     <mRID>1</mRID> 
     <MktPSRType> 
      <psrType>ProdType1</psrType> 
     </MktPSRType> 
     <Period> 
      <timeInterval> 
       <start>2015-12</start> 
       <end>2016-11</end> 
      </timeInterval> 
      <resolution>PT60M</resolution> 
      <Point> 
       <position>1</position> 
       <quantity>9</quantity> 
      </Point> 
      <Point> 
       <position>2</position> 
       <quantity>7</quantity> 
      </Point> 
      <Point> 
       <position>3</position> 
       <quantity>9</quantity> 
      </Point> 

コードは(ここでは期間が全体の構造を確認するために開発されていないデータの同じタイプの「なTimeSeries」という名前の別のノードが含まれています)

<GL_Document xmlns=""> 
    <time_Period.timeInterval>...</time_Period.timeInterval> 
    <TimeSeries> 
     <mRID>1</mRID> 
     <MktPSRType> 
      <psrType>ProdType1</psrType> 
     </MktPSRType> 
     <Period>...</Period> 
    </TimeSeries> 
    <TimeSeries> 
     <mRID>2</mRID> 
     <MktPSRType> 
      <psrType>ProdType2</psrType> 
     </MktPSRType> 
     <Period>...</Period> 
    </TimeSeries> 
    <TimeSeries>...</TimeSeries> 
    <TimeSeries>...</TimeSeries> 
    <TimeSeries>...</TimeSeries> 
    <TimeSeries>...</TimeSeries> 
    <TimeSeries>...</TimeSeries> 
</GL_Document> 

私は次の形式でデータを取得したい:

psrType position quantity 
ProdType1 1   9 
...  ...  ... 
ProdType2 1   ... 

私はこの記事で説明したようにソリューションを適用しようとしました:How to parse XML to R data frame しかし、失敗しました。 私のコードは次のように見えますが、私は結果のデータフレームにデータが含まれていない:

xml.url3<-getURL(xml.file3) 
doc<-xmlParse(xml.url3) 

position_path<-"//GL_Document/TimeSeries/Period/Point/position" 
quantity_path<-"//GL_Document/TimerSeries/Period/Point/quantity" 

df<-data.frame(
    pos=as.integer(sapply(doc[position_path],as,"integer")), 
    quant=as.integer(sapply(doc[quantity_path],as,"integer"))) 

はあなたの助けのためにありがとうございました!

+0

オクラホマので、最終的にはこれは私がやったことです: 'XML psrType値について、data.frame()期間のそれぞれ対応する値に<TimeSeries>につき一つの値をマッピングしancestor::*を使用しています。 (xml.List(doc)、data.frame) doc <-xmlParse dfexp <-df [df $ .id == "TimeSeries"、] ' – Daldal

+0

申し訳ありません、私は2回コメントしなければなりません。編集!それから、私のtimeseriesノード内のすべてのものが列挙されたデータフレームがありました。開始と停止の時間が与えられたので、私は間隔の位置の数を考慮してコードを書くことができました。おそらく最も巧妙な解決策ではないでしょうが、それは機能します! – Daldal

答えて

0

私はあなたがここで必要なものを見つけるかもしれないと思う: How to transform XML data into a data.frame?

このxmlToList()は右について見えます。次に、applyメソッドの1つを使用して、データフレームに取り込むことができます。上記のリンクにグレアの説明があります!

0

XMLのxpathSApply()を使用して、直接XPath式を実行することを検討してください。

library(XML) 

xml.url3 <- getURL(xml.file3) 
doc <- xmlParse(xml.url3) 

period <- xpathSApply(doc, "//Point/position", xmlValue) 
quantity <- xpathSApply(doc, "//Point/quantity", xmlValue) 
psrType <- xpathSApply(doc, "//Point/ancestor::TimeSeries/MktPSRType/psrType", xmlValue) 

df <- data.frame(psrType = psrType, 
       period = as.integer(period), 
       quantity = as.integer(quantity)) 

df 
#  psrType period quantity 
# 1 ProdType2  1  9 
# 2 ProdType2  2  7 
# 3 ProdType2  3  9 
関連する問題