stefan.d...@gmail.com wrote:
Hello, I am trying to convert a simple data.frame (it will always be a few equally long variables) into the XML format (which I don't understand too well but need as input for another program) and reverse the operation (from XML back into data.frame). I found some code which does the first and it works good enough for me (see below). Is there an easy way to reverse the operation?
> My XML
files are nothing fancy (no child nodes or anything, at least as far as I can see.
Just for the record, there are child nodes. You have a top-level node <populationsize> This has several children <size>. And each of these has <age>, <sex> and <number> as children. You don't sub-nodes of these so the hierarchy is relatively flat and does correspond to a data frame with each <size> node as an observation and <age>, <sex> and <number> as variables/columns. I wrote some relatively general functions, but hastily written functions to read this sort of data. You can find them attached or at http://www.omegahat.org/RSXML/xmlToDataFrame.xml You can use these as xmlToDataFrame("size.xml") It handles homogeneous and non-homogeneous nodes (i.e. with the same number and names of sub-nodes or not) and also allows one to specify colClasses somewhat similar to that in read.table() ( but not completely implemented yet). These functions will most likely be in the next release of the XML package. Let me know if they don't work for your data. D.
### data.frame data<- as.data.frame(cbind(c( 0 , 1 ),c( 500 , 300),c(200, 400))) names(data)<-c("age","0","1") ### converts data.frame into XML xml <- xmlTree() xml$addTag("populationsize", close=FALSE) for (i in 1:nrow(data)) { xml$addTag("size", close=FALSE) for (j in names(data)) { xml$addTag(j, data[i, j]) } xml$closeTag() } xml$closeTag() # view the result cat(saveXML(xml)) I put below also an example of how my data looks like. Thanks for any advice! Best and have a great day, Stefan APPENDIX XML-file ------------------ <populationsize> <size> <age>0</age> <sex>0</sex> <number>500</number> </size> <size> <age>0</age> <sex>1</sex> <number>300</number> </size> <size> <age>1</age> <sex>0</sex> <number>200</number> </size> <size> <age>1</age> <sex>1</sex> <number>400</number> </size> </populationsize> --------- DATAFRAME age 0 1 0 500 300 1 200 400 ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.