Hi Adam,

On Jan 23, 2013, at 11:36 AM, Adam Gabbert wrote:

> Hello Gentlemen,
>  
> I mistakenly sent the message twice, because the first time I didn't receive 
> a notification message so I was unsure if it went through properly.
>  
> Your solutions worked great. Thank you!  I felt like I was fairly close just 
> couldn't quite get the final step. 
>  
> Now, I'm trying to reverse the process and account for my header.
>  
> In other words I have my data frame in R:
>  
> BRAND    NUM    YEAR    VALUE
> GMC        1          1999      10000
> FORD       2          2000      12000
> GMC        1          2001       12500
>      etc........
> and I make some edits.
> BRAND    NUM    YEAR    VALUE
> DODGE       3          1999      10000
> TOYOTA       4         2000      12000
> DODGE        3          2001       12500

You needn't transform to a data frame if all you need to do is tweak the values 
of some of the attributes.  You can always set the attributes of each row node 
directly.

s <- c("  <data>", " <row BRAND=\"GMC\" NUM=\"1\" YEAR=\"1999\" VALUE=\"10000\" 
/>", 
" <row BRAND=\"FORD\" NUM=\"1\" YEAR=\"2000\" VALUE=\"12000\" />", 
" <row BRAND=\"GMC\" NUM=\"1\" YEAR=\"2001\" VALUE=\"12500\" />",  
" <row BRAND=\"GMC\" NUM=\"1\" YEAR=\"2008\" VALUE=\"22000\" />", 
" </data>")

x <- xmlRoot(xmlTreeParse(s, asText = TRUE, useInternalNodes = TRUE))

node <- x["row"][[1]]
node
xmlAttrs(node) <- c(BRAND = "BUICK", NUM = "3", YEAR = "2000", VALUE = "0")
node
x



> So now I would need to ouput an XML file in the same format accounting for my 
> header (essentially, add "z:" in front of row). 
>  

I think that what you're describing is a namespace identifier.  Check the XML 
package help for ?xmlNamespace  In particular check this example on the help 
page.

  node <- xmlNode("arg", xmlNode("name", "foo"), namespace="R")
  xmlNamespace(node)


Cheers,
Ben

> (What I want to output)
> >   <data>
> >   <z:row BRAND="DODGE" NUM="3" YEAR="1999" VALUE="10000" />
> >   <z:row BRAND="TOYOTA" NUM="4" YEAR="2000" VALUE="12000" />
> >   <z:row BRAND="DODGE" NUM="3" YEAR="2001" VALUE="12500" />
> >   <z:row BRAND="TOYOTA" NUM="4" YEAR="2002" VALUE="13000" />
> >   <z:row BRAND="DODGE" NUM="3" YEAR="2003" VALUE="14000" />
> >   <z:row BRAND="TOYOTA" NUM="4" YEAR="2004" VALUE="17000" />
> >   <z:row BRAND="DODGE" NUM="3" YEAR="2005" VALUE="15000" />
> >   <z:row BRAND="DODGE" NUM="3" YEAR="1967" VALUE="PRICELESS" />
> >   <z:row BRAND="TOYOTA" NUM="4" YEAR="2007" VALUE="17500" />
> >   <z:row BRAND="DODGE" NUM="3" YEAR="2008" VALUE="22000" />
> >   </data>
> Thus far from the help I've found online I was trying to set up an xmlTree
> xml <- xmlTree()
>  
> and use xml$addTag to create nodes and put in the data from my data frame.  I 
> feel like I'm not really even close to a solution so I'm starting to believe 
> that this might not be the best path to go down.
>  
> Once again, any help is much appreciated.
>  
> AG
> 
>  
> On Tue, Jan 22, 2013 at 6:04 PM, Duncan Temple Lang <dtemplel...@ucdavis.edu> 
> wrote:
> 
> Hi Adam
> 
>  [You seem to have sent the same message twice to the mailing list.]
> 
> There are various strategies/approaches to creating the data frame
> from the XML.
> 
> Perhaps the approach that most closely follows your approach is
> 
>   xmlRoot(doc)[ "row" ]
> 
> which  returns a list of XML nodes whose node name is "row" that are
> children of the root node <data>.
> 
> So
>   sapply(xmlRoot(doc) [ "row" ], xmlAttrs)
> 
> yields a matrix with as many columns as there are  <row> nodes
> and with 3 rows - one for each of the BRAND, YEAR and VALUE attributes.
> 
> So
> 
>   d = t( sapply(xmlRoot(doc) [ "row" ], xmlAttrs) )
> 
> gives you a matrix with the correct rows and column orientation
> and now you can turn that into a data frame, converting the
> columns into numbers, etc. as you want with regular R commands
> (i.e. independently of the XML).
> 
> 
>  D.
> 
> On 1/22/13 1:43 PM, Adam Gabbert wrote:
> >  Hello,
> >
> > I'm attempting to read information from an XML into a data frame in R using
> > the "XML" package. I am unable to get the data into a data frame as I would
> > like.  I have some sample code below.
> >
> > *XML Code:*
> >
> > Header...
> >
> > Data I want in a data frame:
> >
> >    <data>
> >   <row BRAND="GMC" NUM="1" YEAR="1999" VALUE="10000" />
> >   <row BRAND="FORD" NUM="1" YEAR="2000" VALUE="12000" />
> >   <row BRAND="GMC" NUM="1" YEAR="2001" VALUE="12500" />
> >   <row BRAND="FORD" NUM="1" YEAR="2002" VALUE="13000" />
> >   <row BRAND="GMC" NUM="1" YEAR="2003" VALUE="14000" />
> >   <row BRAND="FORD" NUM="1" YEAR="2004" VALUE="17000" />
> >   <row BRAND="GMC" NUM="1" YEAR="2005" VALUE="15000" />
> >   <row BRAND="GMC" NUM="1" YEAR="1967" VALUE="PRICLESS" />
> >   <row BRAND="FORD" NUM="1" YEAR="2007" VALUE="17500" />
> >   <row BRAND="GMC" NUM="1" YEAR="2008" VALUE="22000" />
> >   </data>
> >
> > *R Code:*
> >
> > doc< -xmlInternalTreeParse ("Sample2.xml")
> > top <- xmlRoot (doc)
> > xmlName (top)
> > names (top)
> > art <- top [["row"]]
> > art
> > **
> > *Output:*
> >
> >> art<row BRAND="GMC" NUM="1" YEAR="1999" VALUE="10000"/>
> >
> > * *
> >
> >
> > This is where I am having difficulties.  I am unable to "access" additional
> > rows; ( i.e.  <row BRAND="GMC" NUM="1" YEAR="1967" VALUE="PRICLESS" /> )
> >
> > and I am unable to access the individual entries to actually create the
> > data frame.  The data frame I would like is as follows:
> >
> > BRAND    NUM    YEAR    VALUE
> > GMC        1          1999      10000
> > FORD       2          2000      12000
> > GMC        1          2001       12500
> >     etc........
> >
> > Any help or suggestions would be appreciated.  Conversly, my eventual goal
> > would be to take a data frame and write it into an XML in the previously
> > shown format.
> >
> > Thank you
> >
> > AG
> >
> >       [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > 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.
> 

Ben Tupper
Bigelow Laboratory for Ocean Sciences
180 McKown Point Rd. P.O. Box 475
West Boothbay Harbor, Maine   04575-0475 
http://www.bigelow.org








        [[alternative HTML version deleted]]

______________________________________________
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.

Reply via email to