如何为数据框中的每一行获取单独的XML格式?

时间:2014-01-29 11:27:47

标签: xml r

我想将数据框导出为XML格式。在数据框中 - “结果”我有两列和两行 我使用这段代码:

xmlNode("data",.children=lapply(names(results),function(n){xmlNode(n,results[[n]])}))   

我的结果好坏参与:

<data> <time>2013-10-27 13:00:002013-10-27 13:00:00</time>
<p_value>0.990.79</p_value> </data>`

两行输入到同一XML节点。 我将有超过2行,所以我希望能够为每一行获得分离的XML格式,如:

<data> 
<time>2013-10-27 13:00:00</time>
<p_value>0.99</p_value>
</data>

下一行看起来像这样:

<data> 
<time>2013-10-27 13:00:00</time>
<p_value>0.79</p_value>
</data

我的问题是如何以XML格式分隔行?

1 个答案:

答案 0 :(得分:0)

让我们从一些虚拟数据开始:

dt <- data.frame( x = 1:10, y = LETTERS[1:10] )

在您的示例中,您正在申请data.frame列(使用lapply),尽管您解释说,您更愿意应用于行。然后它看起来像这样:

xmlNode( "data", .children = apply(
  dt, 1, function(n){
    xmlNode( "row", 
      xmlNode( names(dt)[1], n[1] ),
      xmlNode( names(dt)[2], n[2] )
    )
  }
))   

<data>
 <row>
  <x> 1</x>
  <y>A</y>
 </row>
 <row>
  <x> 2</x>
  <y>B</y>
...

通用解决方案

如果您正在寻找更通用的解决方案,将任意data.frame转换为xml节点,您可以使用此解决方案:

library(plyr)
xmlNode( "data", .children =
  alply( results, 1, function(row)
    xmlNode( "row", 1, .children = alply( row , 2, function(cell) xmlNode( names(cell), cell ) ) )
  )
)