[R] Aggregate with Function List ?

Michael Karol MKarol at syntapharma.com
Wed Mar 7 16:36:19 CET 2012


All:

It now appears to be working; however, I have a new problem.  The format of the output is not what I need.  Currently it produces an output as three columns; "Group.1", "Group.2", and "x"
whereas I need a data frame with columns of Day, Hour, mean, sd, median, min, max.
Interestingly, the output appears on the console looking like the data frame I need with 7 columns, but internally it only has 3.
I'm using R version 2.14.0 (2011-10-31)

> MeansByDayTime
   Group.1 Group.2          x.1          x.2          x.3          x.4          x.5
1        1     0.0 0.0003333333 0.0005773503 0.0000000000 0.0000000000 0.0010000000
2        8     0.0 0.0003333333 0.0005773503 0.0000000000 0.0000000000 0.0010000000
3        1     0.5 2.4000000000 0.5291502622 2.2000000000 2.0000000000 3.0000000000
4        8     0.5 4.6333333333 2.9501412396 3.4000000000 2.5000000000 8.0000000000
5        1     1.0 2.7333333333 0.6429100507 3.0000000000 2.0000000000 3.2000000000
6        8     1.0 4.1000000000 1.7691806013 3.8000000000 2.5000000000 6.0000000000
7        1     2.0 1.8666666667 0.1527525232 1.9000000000 1.7000000000 2.0000000000
8        8     2.0 3.5333333333 0.5773502692 3.2000000000 3.2000000000 4.2000000000
9        1     2.5 3.6333333333 1.1846237096 3.0000000000 2.9000000000 5.0000000000
10       8     2.5 4.2666666667 0.8962886440 3.8000000000 3.7000000000 5.3000000000
11       1     3.0 8.1666666667 0.7637626158 8.0000000000 7.5000000000 9.0000000000
12       8     3.0 7.4666666667 2.1939310229 8.2000000000 5.0000000000 9.2000000000
13       1     4.0 4.3333333333 1.5275252317 4.0000000000 3.0000000000 6.0000000000
14       8     4.0 4.0000000000 1.9467922334 4.7000000000 1.8000000000 5.5000000000
15       1     6.0 2.9666666667 0.6506407099 3.0000000000 2.3000000000 3.6000000000
16       8     6.0 2.7333333333 1.1930353445 2.2000000000 1.9000000000 4.1000000000
17       1    12.0 2.1666666667 1.1590225767 2.0000000000 1.1000000000 3.4000000000
18       8    12.0 2.7666666667 3.0615900009 1.1000000000 0.9000000000 6.3000000000

My example data set and script follows.

# Create a Test Data Frame
Subject <-c(1001,1001,1001,1001,1001,1001,1001,1001,1001,
            1002,1002,1002,1002,1002,1002,1002,1002,1002,
            1003,1003,1003,1003,1003,1003,1003,1003,1003,
            1001,1001,1001,1001,1001,1001,1001,1001,1001,
            1002,1002,1002,1002,1002,1002,1002,1002,1002,
            1003,1003,1003,1003,1003,1003,1003,1003,1003 ) 
Day <- c (1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
          8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ) 
Hour <- c(0,0.5,1,2,2.5,3,4,6,12,
          0,0.5,1,2,2.5,3,4,6,12,
          0,0.5,1,2,2.5,3,4,6,12,
          0,0.5,1,2,2.5,3,4,6,12,
          0,0.5,1,2,2.5,3,4,6,12,
          0,0.5,1,2,2.5,3,4,6,12 )
Conc <- c(0,2,3,2,2.9,7.5,4,3,2,0,2.2,3.2,1.9,3,8,3,2.3,3.4,0.001,3,2,1.7,5,9,6,3.6,1.1,
         0.001,3.4,2.5,4.2,3.8,9.2,4.7,4.1,1.1,0,2.5,3.8,3.2,3.7,5,1.8,1.9,6.3,0,8,6,3.2,5.3,8.2,5.5,2.2,0.9)
DF <- data.frame(cbind(Subject,Day,Hour,Conc))
#----------------------------------------------------------------------------------------------------------------------------
# ----------- Compute Mean Concentration by Day and Hour. 
 MeansByDayTime <- aggregate(as.double(DF$Conc), by = list(DF$Day, DF$Hour), FUN =
       function(x) c( mean(x, trim = 0, na.rm = T, weights=NULL),
                      sd(x, na.rm=TRUE),
                      median(x, na.rm=TRUE),
                      min(x, na.rm=TRUE),
                      max(x, na.rm=TRUE)
                    )
         )
# Show results
MeansByDayTime



Thank you

Regards,
Michael

================================================================================
-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Michael Karol
Sent: Monday, March 05, 2012 5:21 PM
To: David Winsemius
Cc: r-help at r-project.org
Subject: Re: [R] Aggregate with Function List ?

Thank you for the suggestion.  Tried it as :

MeansByDoseDayTime <- aggregate(as.double(PK04Sub$Concentration.ng.mL.), by = list(PK04Sub$Dose.Level, PK04Sub$Day, PK04Sub$HourNominal), FUN =
       function(x) c( mean(x, trim = 0, na.rm = T, weights=NULL),
                      sd(x, na.rm=TRUE),
                      median(x, na.rm=TRUE),
                      min(x, na.rm=TRUE),
                      max(x, na.rm=TRUE)
                    )
         )

and got the following error message.

Problem in FUN(...X.sub.i...., all.indices = c(1, 2..: FUN did not always return a scalar 


Suggestions?

Regards, 
Michael


-----Original Message-----
From: David Winsemius [mailto:dwinsemius at comcast.net] 
Sent: Thursday, February 23, 2012 1:55 PM
To: Michael Karol
Cc: r-help at r-project.org
Subject: Re: [R] Aggregate with Function List ?


On Feb 23, 2012, at 1:41 PM, Michael Karol wrote:

> R Experts
>
>
>
>  I wish to tabulate into one data frame statistics summarizing
> concentration data.   The summary is to include mean, standard
> deviation, median, min and max.  I wish to have summaries by Dose, Day
> and Time.   I can do this by calling aggregate once for each of the
> statistics (mean, standard deviation, median, min and max) and then 
> execute 4 merges to merging the 5 data frames into one.  (Example 
> aggregate code for mean only is shown below.)
>
>  Can someone show me the coding to do this as one command, rather than
> 5 calls to aggregate and 4 merges.  In other words, in essence, I'd 
> like to present to "FUN =" a list of functions, so all the summary 
> stats come back in one data frame.  Your assistance is appreciated.  
> Thank you.
>
Perhaps something like this?

MeansByDoseDayTime <- aggregate(as.double(DF$Concentration), by = list(DF$Dose, DF$Day, DF$Time), FUN =
       function(x) c( mean(x, trim = 0, na.rm = T, weights=NULL),
                      sd(x, na.rm=TRUE),
                      median(x, na.rm=TRUE),
                      min(na.rm=TRUE),
                      max(x, na.rm=TRUE)
                    )
         )
>
>
>

David Winsemius, MD
West Hartford, CT

______________________________________________
R-help at 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.



More information about the R-help mailing list