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.