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 <deter...@umn.edu>
To: r-help@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

______________________________________________
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