从R中的数据帧生成解析xml树的好方法

从R中的数据帧生成解析xml树的好方法,xml,r,dataframe,Xml,R,Dataframe,假设我有一个数据帧df: df<-data.frame(c("A","B","C","D"), c(1,2,3,10),c(1.0,2.5,3.14,-4)) names(df)<-c("test","foo","bar") 正如前面提到的链接中所述,行似乎没有分开。然而,从技术上讲,这似乎不是真的。当我做一个小蓝宝石: xmlSApply(xmlNode("dataframe",.children=lapply(names(df),function(n){xmlNode(n,df

假设我有一个数据帧df:

df<-data.frame(c("A","B","C","D"), c(1,2,3,10),c(1.0,2.5,3.14,-4))
names(df)<-c("test","foo","bar")
正如前面提到的链接中所述,行似乎没有分开。然而,从技术上讲,这似乎不是真的。当我做一个小蓝宝石:

xmlSApply(xmlNode("dataframe",.children=lapply(names(df),function(n){xmlNode(n,df[[n]])}))[[1]], xmlValue)
我得到各个列中的所有值完全分开:

    text
[1,] "A" 
[2,] "B" 
[3,] "C" 
[4,] "D"
这将使我能够绘制数据等。然而,当我保存xml结构并重新加载它时,元素之间的分离消失了

我的问题是:

1.)通过这里描述的方法是否可以保存数据,这样我就可以在以后分离元素(当xml树尚未写入硬盘驱动器时,我就可以这样做)


2.)如果不能做到这一点:当我使用Beaterfield()的泛型方法时,如何有效地解析每列

plyr
不是必需的,只需以简单的方式攻击它,而不是尝试使用花哨的
apply
构造(它只是一个cpl多行):

库(XML)

谢谢你的建议!如何解析doc中的“foo”和“bar”-值(如果我想在foo上绘制bar)?只需将
列转换为.numeric
,就像转换标准data.frame.Ok一样,因此您的方法是重新转换整个xml树并使用它。我确实理解,我在评论中的问题是如何解析xml结构以获得foo和bar列。不,我会像平常一样使用数据帧。您需要将其转换为XML。我只是展示了示例转换是有效的。
    text
[1,] "A" 
[2,] "B" 
[3,] "C" 
[4,] "D"
library(XML)

dat <- data.frame(test=c("A", "B", "C", "D"),
                  foo=c(1, 2, 3, 10),
                  bar=c(1.0, 2.5, 3.14,- 4))

dat

##   test foo   bar
## 1    A   1  1.00
## 2    B   2  2.50
## 3    C   3  3.14
## 4    D  10 -4.00

# make a new XML doc
doc <- newXMLDoc()

# add a root node
root <- newXMLNode("datframe", doc=doc)

# build rows/cols
for (i in 1:nrow(dat)) {
  row <- newXMLNode("row", parent=root)
  for (col in names(dat)) {
    newXMLNode(col, dat[i, col], parent=row)
  }
}

# verify it worked
xmlToDataFrame(doc)

##   test foo  bar
## 1    A   1    1
## 2    B   2  2.5
## 3    C   3 3.14
## 4    D  10   -4

# write it out to a file
saveXML(doc, "dataframe.xml")

## [1] "dataframe.xml"