Hello,
You can use ddply from the very useful plyr package to do this.
There must be a way using "base R" functions, but plyr is
worth looking into in my opinion.
> install.packages("plyr")
> library(plyr)
> ddply(myData, .(class, group, name), function(x) mean(x$height))
class group name V1
1 0 A Tom 62.5
2 0 B Jane 58.5
3 1 A Enzo 66.5
4 1 B Mary 70.5
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
______________________________________________
[email protected] 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.