R 两因素变量的平均值

R 两因素变量的平均值,r,tapply,R,Tapply,我有以下数据: 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) a我个人会使用aggregate: aggregate(length ~ sp, data = df, FUN= "mean" ) # by specie

我有以下数据:

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)

a我个人会使用
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

图书馆plyr对这样的东西很有帮助

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

顺便说一下,

上还有更多的示例,只需使用(df,tapply(sp,method,count))
就可以在您的示例中使用。
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