按级别平均值

时间:2014-04-30 18:23:41

标签: r mean levels factors

也许这很简单,但我无法在网上找到答案。我按平均因素按平均计算有问题。 我的数据看起来很典型:

factor, value
a,1
a,2
b,1
b,1
b,1
c,1

我想得到向量A只包含对于等级“a”的含义 如果我在consol上键入A,我想获得1.5 而这种计算均值的方法,必须使用因子。

提前感谢您的帮助。

4 个答案:

答案 0 :(得分:28)

看看tapply,它可以根据因素分解向量并将函数应用于每个子集

> dat<-data.frame(factor=sample(c("a","b","c"), 10, T), value=rnorm(10))
> r1<-with(dat, tapply(value, factor, mean))
> r1
         a          b          c
 0.3877001 -0.4079463 -1.0837449
> r1[["a"]]
[1] 0.3877001

您可以使用r1[["a"]]

来访问结果

或者,一个流行的R包(plyr)有很好的方法可以做到这一点。

> library(plyr)
> r2<-ddply(dat, .(factor), summarize, mean=mean(value))
> r2
  factor       mean
1      a  0.3877001
2      b -0.4079463
3      c -1.0837449
> subset(r2,factor=="a",select="mean")
       mean
1 0.3877001

您也可以使用dlply代替(采用数据框并返回列表)

> dlply(dat, .(factor), summarize, mean=mean(value))$a
       mean
1 0.3877001

答案 1 :(得分:3)

只是为了好好发布data.table解决方案,尽管你可能应该做@lukeA建议的

library(data.table) 
A <- setDT(df[df$factor == "a", ])[, mean(value)]
## [1] 1.5

答案 2 :(得分:3)

当factor = a:

时,以下代码询问值的平均值
mean(data$value[data$factor == "a"])

答案 3 :(得分:3)

另一个简单的可能性是&#34; by&#34;功能:

by(value, factor, mean)

你可以得到因子水平的平均值&#34; a&#34;由:

factor_means <- by(value, factor, mean)
factor_means[attr(factor_means, "dimnames")$factor=="a"]