特定のデータをXMLファイルからRデータフレームに抽出します。私は後でAnoto Penによってデジタル化されたペンストロークを再構築するためにこのデータを使用したいと思います。 これまでライブラリrvestを使ってこれをやっています。 (XMLファイルの例は下にあります)R&XML - データフレームに同じ名前の親ノードを修正するためのデータを割り当てます。
library(rvest)
file <- read_xml("1.xml")
#The interesting data is in the stroke nodes.
stroke <- xml_nodes(file, "stroke")
#One example for extracting data I am interested in.
bounds <- xml_nodes(stroke, "bounds")
x <- xml_text(xml_nodes(bounds, "x"))
y <- xml_text(xml_nodes(bounds, "y"))
width <- xml_text(xml_nodes(bounds, "width"))
height <- xml_text(xml_nodes(bounds, "height"))
#Putting this data into a Dataframe.
df <- data.frame(x, y, width, height)
これまでのところとても良いです。私の問題は今ノード<sample>
です。私は、XMLファイル内にノード番号<stroke>
を最低1つ持っています。最大100各<stroke>
ノードには、それぞれノード<sample>
があります。サンプルノードからx、y、および時間データを抽出して、データフレーム内の対応するストロークに割り当てることができます。 は例えば、私はちょうど
mysamples <- xml_nodes(stroke, "sample")
を行う場合、私はすべてのストロークからすべてのサンプルを受け取ったが、私は異なるストロークを区別する必要があります。 私は、for-loopを使って異なるストロークを反復する関数を書くことを考えましたが、これは実現できませんでした。
2つの<stroke>
ノードを持つ短縮されたXMLファイルサンプルです。
<?xml version="1.0" encoding="UTF-8" ?>
<page>
<UnassignedStrokes>
<starttime>1459867893629</starttime>
<endtime>1459867896812</endtime>
<stroke>
<starttime>1459867893629</starttime>
<endtime>1459867894815</endtime>
<linewidth>1.0</linewidth>
<color>-14090101</color>
<bounds>
<x>260.0</x>
<y>750.0</y>
<width>217.0</width>
<height>18.0</height>
</bounds>
<sample>
<x>260.625</x>
<y>766.0</y>
<time>1459867893629</time>
<force>108</force>
</sample>
<sample>
<x>260.625</x>
<y>763.625</y>
<time>1459867893722</time>
<force>120</force>
</sample>
<sample>
<x>262.875</x>
<y>762.0</y>
<time>1459867893775</time>
<force>122</force>
</sample>
</stroke>
<stroke>
<starttime>1459867895892</starttime>
<endtime>1459867896812</endtime>
<linewidth>1.0</linewidth>
<color>-14090101</color>
<bounds>
<x>364.0</x>
<y>701.0</y>
<width>10.0</width>
<height>125.0</height>
</bounds>
<sample>
<x>364.5</x>
<y>701.0</y>
<time>1459867895892</time>
<force>32</force>
</sample>
<sample>
<x>366.0</x>
<y>702.0</y>
<time>1459867895905</time>
<force>106</force>
</sample>
<sample>
<x>367.25</x>
<y>702.625</y>
<time>1459867895958</time>
<force>120</force>
</sample>
</stroke>
</UnassignedStrokes>
</page>
私は非常に任意の助けに感謝!
現在、境界データフレームはストロークをキャプチャしません。 2つのデータフレームが必要ですか:列として識別されたストロークデータを持つ範囲とサンプル? XMLでは、どちらもお互いの兄弟です。希望の最終結果を表示してください。 – Parfait