2013-05-21 82 views
8

,我有以下数据:平均的变量由两个因素

a <- c(1,1,1,1,2,2,2,2) 
b <- c(2,4,6,8,2,3,4,1) 
c <- factor(c("A","B","A","B","A","B","A","B")) 
df <- data.frame(
    sp=a, 
    length=b, 
    method=c) 

我可以用下面的方法来获取每一个物种的样本数的计数:

n <- with(df,tapply(sp,method,function(x) count(x))) 

如何我是否也通过每种物种的方法得到平均长度?

+1

顺便说一句,为了节省一些键入'with(df,tapply(sp,method,count))''在你的例子中可以正常工作。 –

回答

9

个人而言,我会用aggregate

aggregate(length ~ sp, data = df, FUN= "mean") 
# by species only 
#  sp length 
#1 1 5.0 
#2 2 2.5 

aggregate(length ~ sp + method, data = df, FUN= "mean") 
    # by species and method 
# sp method length 
#1 1  A  4 
#2 2  A  3 
#3 1  B  6 
#4 2  B  2 

一切在一起,你可能想:

aggregate(length ~ method, data = df, function(x) c(m = mean(x), counts = length(x))) 

# counts and mean for each method 
# method length.m length.counts 
#1  A  3.5   4.0 
#2  B  4.0   4.0 
5

图书馆plyr是这样的东西

library(plyr) 
new.df <- ddply(df, c("method", "sp"), summarise, 
       mean.length=mean(length), 
       max.length=max(length), 
       n.obs=length(length)) 

非常有帮助的给你

> new.df 
    method sp mean.length max.length n.obs 
1  A 1   4   6  2 
2  A 2   3   4  2 
3  B 1   6   8  2 
4  B 2   2   3  2 

更多示例在http://www.inside-r.org/packages/cran/plyr/docs/ddply