[R] reformatting some data
David Winsemius
dwinsemius at comcast.net
Wed Dec 5 18:40:54 CET 2012
On Dec 4, 2012, at 1:44 PM, arun wrote:
> Hi,
> You can also do this:
> dat1<-structure(list(group = c(4L, 3L, 4L, 4L, 4L, 2L),
> X3.Hydroxybutyrate =
> c(4e-04,
> 5e-04, 4e-04, 6e-04, 5e-04, 7e-04), X3.Hydroxyisovalerate = c(3e-04,
> 3e-04, 3e-04, 3e-04, 3e-04, 4e-04), ADP = c(5e-04, 6e-04, 6e-04,
> 5e-04, 7e-04, 7e-04)), .Names = c("group", "X3.Hydroxybutyrate",
> "X3.Hydroxyisovalerate", "ADP"), row.names = c(347L, 353L, 359L,
> 365L, 371L, 377L), class = "data.frame")
>
> datM<-melt(dat1,id.var="group")
An explicit call to library(reshape2) might be in order before a melt
call.
>
> xtabs(value~variable+group,data=datM)
> # group
> #variable 2 3 4
> # X3.Hydroxybutyrate 0.0007 0.0005 0.0019
> # X3.Hydroxyisovalerate 0.0004 0.0003 0.0012
> # ADP 0.0007 0.0006 0.0023
This has implicitly summed the entires from items by "group" values.
That might or might not have been what the OP wanted. xtabs does not
allow a function to be specified. (It's output is expected to be a
contingency table of counts so it only makes sense to sum values.) The
aggregate function allows either choice within the base package:
I see that arun used `mean` as his function in an earlier post using
reshape2::dcast
> aggregate(dat1[-1] , dat1['group'], FUN=mean)
group X3.Hydroxybutyrate X3.Hydroxyisovalerate ADP
1 2 0.000700 4e-04 0.000700
2 3 0.000500 3e-04 0.000600
3 4 0.000475 3e-04 0.000575
This is the aggregate method for summation:
> aggregate(dat1[-1] , dat1['group'], FUN=sum)
group X3.Hydroxybutyrate X3.Hydroxyisovalerate ADP
1 2 0.0007 0.0004 0.0007
2 3 0.0005 0.0003 0.0006
3 4 0.0019 0.0012 0.0023
> A.K.
>
>
>
> ----- Original Message -----
> From: Charles Determan Jr <deter088 at umn.edu>
> To: r-help at r-project.org
> Cc:
> Sent: Tuesday, December 4, 2012 4:17 PM
> Subject: [R] reformatting some data
>
> Hello,
>
> I am trying to reformat some data so that it is organized by group
> in the
> columns. The data currently looks like this:
>
> group X3.Hydroxybutyrate X3.Hydroxyisovalerate ADP
> 347 4 4e-04 3e-04
> 5e-04
> 353 3 5e-04 3e-04
> 6e-04
> 359 4 4e-04 3e-04
> 6e-04
> 365 4 6e-04 3e-04
> 5e-04
> 371 4 5e-04 3e-04
> 7e-04
> 377 2 7e-04 4e-04
> 7e-04
>
> I would like to reformat it so it is like this:
>
> 2 3 4
> var1
> var2
> var3
>
>
> I realize that there unequal numbers in each group but I would like to
> none-the-less if possible.
> Here is a subset of the data:
>
> structure(list(group = c(4L, 3L, 4L, 4L, 4L, 2L), X3.Hydroxybutyrate =
> c(4e-04,
> 5e-04, 4e-04, 6e-04, 5e-04, 7e-04), X3.Hydroxyisovalerate = c(3e-04,
> 3e-04, 3e-04, 3e-04, 3e-04, 4e-04), ADP = c(5e-04, 6e-04, 6e-04,
> 5e-04, 7e-04, 7e-04)), .Names = c("group", "X3.Hydroxybutyrate",
> "X3.Hydroxyisovalerate", "ADP"), row.names = c(347L, 353L, 359L,
> 365L, 371L, 377L), class = "data.frame")
>
David Winsemius, MD
Alameda, CA, USA
More information about the R-help
mailing list