The following solutions will do this:
Subset
ndf1<-subset(df, a>=-40 & a<=0)
ndf2<-subset(df, a>=0 & a<=40)
mean(ndf1[,3])
mean(ndf2[,3])
Or easier
mean(df[a>=-40 & a<=0, 3])
mean(df[a>=0 & a<=40, 3])
Using ddply
library(plyr)
ddply(df, .(a>=-40 & a<=0), summarize, mean=mean(b))
ddply(df, .(a>=0 & a<=40), summarize, mean=mean(b))