2014-01-29 37 views
1

我想将我的数据导出到XML,我不知道如何添加矩阵的列名而不写它的名字。
我有一个名为“results”的矩阵,有2列:time,p_value
如何将列名添加到xmlNode?
我使用XML包:如何在R中使用xmlNode时添加矩阵的列名?

的xmlNode(结果)
< 2013年10月27日13:00:00 />
< 0.99 />

我希望它看起来像这样:

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

谢谢!

+1

'XML'包怎么样? – tonytonov

+0

我正在使用xmlNode从XML包,但我没有得到列的名称,我没有找到如何做到这一点。 – Liron

+0

啊,对不起,你的问题并不明显。您可能想编辑问题以强调您知道如何导出,但在指定标签时遇到问题。那样的话,你更有可能得到更多的关注。 – tonytonov

回答

0

假设你正在创建一个XML文件,而不仅仅是一个片段:

> results=data.frame(time=date(),p_value=0.99,stringsAsFactors=FALSE) 

然后开始一个新的XML树,并添加名称节点到它:

> z = xmlTree("mydata") 
Warning message: 
In xmlRoot.XMLInternalDocument(currentNodes[[1]]) : empty XML document 
> z$addNode("time",results$time) 
> z$addNode("p_value",results$p_value) 

然后XML的样子:

> cat(xml(z)) 
<?xml version="1.0"?> 

<mydata> 
    <time>Wed Jan 29 08:24:18 2014</time> 
    <p_value>0.99</p_value> 
</mydata> 

xmlTree更多的帮助。

如果您想要创建一个包含数据的单个节点,则必须将其包装在更高级别的XML节点中 - 您不能只拥有这样的两个XML结构。因此:

> xmlNode("data",.children=lapply(names(results),function(n){xmlNode(n,results[[n]])})) 
<data> 
<time>Wed Jan 29 08:24:18 2014</time> 
<p_value>0.99</p_value> 
</data> 

这创建一个名为data新节点,并随后循环对结果数据帧,用于与合适的名称和值的每个元素创建单个新的节点和将其添加为孩子到data节点。

+0

谢谢,这非常有帮助。我试图用几行的数据帧上运行,并得到结果混合: 2013年10月27日13:00:002013-10-27 13:00:00 running_totaldeltas 浏览器浏览器

0.9999049356582450.798653468698788

如何区分结果? – Liron

+0

Thanks @ Spacedman-在最后的评论中,我展示了你为两行写的最后一个代码的结果。我怎样才能分离结果,使每一行都有一个独立的节点? – Liron

+0

请编辑您的问题以更好地反映您的数据,包括示例。 – Spacedman