JPC*_*JPC 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
Run Code Online (Sandbox Code Playgroud)
您可以使用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
Run Code Online (Sandbox Code Playgroud)
您也可以使用dlply(它采用数据帧并返回列表)
> dlply(dat, .(factor), summarize, mean=mean(value))$a
mean
1 0.3877001
Run Code Online (Sandbox Code Playgroud)
小智 7
以下代码要求因子 = a 时的平均值:
mean(data$value[data$factor == "a"])
Run Code Online (Sandbox Code Playgroud)
只是为了好玩发布data.table解决方案,尽管您可能应该按照@lukeA 的建议进行操作
library(data.table)
A <- setDT(df)[factor == "a", mean(value)]
## [1] 1.5
Run Code Online (Sandbox Code Playgroud)
Another simple possibilty would be the "by" function:
by(value, factor, mean)
Run Code Online (Sandbox Code Playgroud)
You can get the mean of factor level "a" by:
factor_means <- by(value, factor, mean)
factor_means[attr(factor_means, "dimnames")$factor=="a"]
Run Code Online (Sandbox Code Playgroud)