2016-08-14 6 views
0

では、次の形式でRで文書を持って言う:はdata.frameするためのXML/HTMLドキュメント内の要素を強制し

<grp> 
<elementx> 
    <sub_a>a</sub_a> 
    <sub_b>b</sub_b> 
    <sub_c>c</sub_c> 
</elementx> 
<elementx> 
    <sub_a>1</sub_a> 
    <sub_b>2</sub_b> 
    <sub_c>3</sub_c> 
</elementx> 
</grp> 

は何data.frameにこれらを強制するための最もエレガントな方法、すなわちだろう。以下に相当する..?シンプルな構造で、既にあるXMLを使用した

data.frame(sub_a = c('a',1), sub_b = c('b',2), sub_c = c('c',3)) 
    sub_a sub_b sub_c 
1  a  b  c 
2  1  2  3 

これは、HTMLのテーブルではありませんが、すべての要素が同じシンプルな内部形式を共有しているため私たちはテーブルのように扱うことができるはずです。..

+0

data.frame列の要素は同じ型でなければなりません。したがって、列の数値は文字型にキャストされます。私はこれがあなたが望むものだと思いますか?あなたは 'xmlToDataFrame()'を試しましたか – dww

+0

@dwwのように、あなたのXMLはXMLパッケージのxmlToDataframeで処理できる簡単な構造です: 'df < - xmlToDataFrame(nodes = getNodeSet(doc、" // elementx "))' – Parfait

+0

ありがとう。私は '' xml_nodeset "'の関数 'xmlToDataFrame'の継承されたメソッドを見つけることができませんでした。私が間違っていることは何か考えていますか? http://pastebin.com/raw/LTfY3RZC – geotheory

答えて

2

次のようにこのような、それが簡単にXMLパッケージからxmlToDataFrame()使用して変換することができます。

:XMLファイルである

library(XML) 

xmlstr <- 
"<grp> 
    <elementx> 
    <sub_a>a</sub_a> 
    <sub_b>b</sub_b> 
    <sub_c>c</sub_c> 
    </elementx> 
    <elementx> 
    <sub_a>1</sub_a> 
    <sub_b>2</sub_b> 
    <sub_c>3</sub_c> 
    </elementx> 
</grp>" 

df <- xmlToDataFrame(xmlstr) 
df 
# sub_a sub_b sub_c 
#1  a  b  c 
#2  1  2  3 

場合は、文字列ではなく、あなたはこれを使用することができます

xmlstr <- readLines("test.xml") 
df <- xmlToDataFrame(xmlstr) 

あなたは(あなたの質問にコメントのように)、httpアドレスから直接XMLを取得したい場合は、に遅く、非常に大規模なXMLファイルを扱っている場合、これは

doc = readLines('https://www.gov.uk/government/announcements.atom?announcement_filter_option=statements&topics%5B%5D=transport') 
df2 <- xmlToDataFrame(doc) 

の作品このように変換すると、this blog postはgithubでホストされているより高速な関数を記述できます。require(devtools); install_github("processVISION", "muschellij2")

関連する問題