也许这很简单,但我无法在网上找到答案。我按平均因素按平均计算有问题。 我的数据看起来很典型:
factor, value
a,1
a,2
b,1
b,1
b,1
c,1
我想得到向量A只包含对于等级“a”的含义 如果我在consol上键入A,我想获得1.5 而这种计算均值的方法,必须使用因子。
提前感谢您的帮助。
答案 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"]