如何用条件计算平均值?

时间:2015-02-13 06:39:02

标签: r conditional-statements mean

以下是生成可重现数据帧的脚本:

id <- c(1:20)
a <- as.numeric(round(runif(20,-40,40),2))
b <- as.numeric(round(a*1.4+60,2))
df <- as.data.frame(cbind(id, a, b))

我想计算&#34; b&#34;的平均值。在&#34; a&#34;的不同条件下。 例如,&#34; b&#34;是什么意思?当-40 =&lt; a&lt; 0;什么是&#34; b&#34;当0 =&lt; a&lt; = 40。

非常感谢!

2 个答案:

答案 0 :(得分:4)

以下是一个快速data.table解决方案(假设coefa

library(data.table)
setDT(df)[, .(MeanASmall = mean(b[-40 <= a & a < 0]),
              MeanABig = mean(b[0 <= a & a <= 40]))]
#    MeanASmall MeanABig
# 1:   33.96727    89.46

如果a范围有限,您可以使用基数R快速执行此操作

sapply(split(df, df$a >= 0), function(x) mean(x$b))
#     FALSE     TRUE 
#  33.96727 89.46000 

答案 1 :(得分:4)

以下解决方案可以做到:

子集

ndf1<-subset(df, a>=-40 & a<=0)
ndf2<-subset(df, a>=0 & a<=40)

mean(ndf1[,3])
mean(ndf2[,3])

或更简单

mean(df[a>=-40 & a<=0, 3]) 
mean(df[a>=0 & a<=40, 3]) 

使用ddply

library(plyr)
ddply(df, .(a>=-40 & a<=0), summarize, mean=mean(b))
ddply(df, .(a>=0 & a<=40), summarize, mean=mean(b))