Geoffrey -
   The output you want is exactly what the aggregate() function
provides:

aggregate(myData$height, myData[c('class','group','name')],mean)
  class group name    x
1     1     A Enzo 66.5
2     0     B Jane 58.5
3     1     B Mary 70.5
4     0     A  Tom 62.5

It should be mentioned that converting tapply's output to this form
isn't too difficult:

tt = tapply(myData$height, data.frame(myData$class, myData$group, myData$name),
+             mean)
answer = as.data.frame(as.table(tt))
subset(answer,!is.na(Freq))
   myData.class myData.group myData.name Freq
2             1            A        Enzo 66.5
7             0            B        Jane 58.5
12            1            B        Mary 70.5
13            0            A         Tom 62.5

                                        - Phil Spector
                                         Statistical Computing Facility
                                         Department of Statistics
                                         UC Berkeley
                                         spec...@stat.berkeley.edu


                                        - Phil Spector
                                         Statistical Computing Facility
                                         Department of Statistics
                                         UC Berkeley
                                         spec...@stat.berkeley.edu



On Wed, 6 Oct 2010, Geoffrey Smith wrote:

Hello, I am having trouble getting the output from the tapply function
formatted so that it can be made into a nice table.  Below is my question
written in R code.  Does anyone have any suggestions?  Thank you.  Geoff

#Input the data;
name <- c('Tom', 'Tom', 'Jane', 'Jane', 'Enzo', 'Enzo', 'Mary', 'Mary');
year <- c(2008, 2009, 2008, 2009, 2008, 2009, 2008, 2009);
group <- c('A', 'A', 'B', 'B', 'A', 'A', 'B', 'B');
class <- c(0, 0, 0, 0, 1, 1, 1, 1);
height <- c(62, 63, 59, 58, 67, 66, 70, 71);

#Combine the data into a data frame;
myData <- data.frame(name, year, group, class, height);
myData;

#Calculate the mean of height by class, group, and name;
tapply(myData$height, data.frame(myData$class, myData$group, myData$name),
mean);

#The raw output from the tapply function is fine, but I would;
#really like the output to look like this;
#  class   group     name     mean
#    0       A            Tom        62.5
#    0       B            Jane        58.5
#    1       A            Enzo       66.5
#    1       B            Mary       70.5

--
Geoffrey Smith
Visiting Assistant Professor
Department of Finance
W. P. Carey School of Business
Arizona State University

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

Reply via email to