2014-07-13 100 views
-1
aggregate(value ~ Vertical+ OLorPL, mdata,sum,na.rm=TRUE) 

上面的代码工作,但它包括一个“水平”列中的总和。我要汇总的所有记录,总结价值,但排除MDATA $水平==“XYZ”聚合一个子集

回答

0

只需从data排除这些记录的记录:

aggregate(value ~ Vertical+ OLorPL, mdata[mdata$Horizontal != 'xyz',],sum,na.rm=TRUE) 
1

我希望你已经注意到了, aggregate函数确实有一个subset的说法。

比较:

从 “mtcars” 数据集无子集。

aggregate(mpg ~ cyl + gear, mtcars, mean) 
# cyl gear mpg 
# 1 4 3 21.500 
# 2 6 3 19.750 
# 3 8 3 15.050 
# 4 4 4 26.925 
# 5 6 4 19.750 
# 6 4 5 28.200 
# 7 6 5 19.700 
# 8 8 5 15.400 

子集下降,其中“团”和“齿轮”等于4的所有行:

aggregate(mpg ~ cyl + gear, mtcars, mean, 
      subset=c(!cyl %in% 4 & !gear %in% 4)) 
# cyl gear mpg 
# 1 6 3 19.75 
# 2 8 3 15.05 
# 3 6 5 19.70 
# 4 8 5 15.40 

这应该给你同样的结果@ MatthewLundberg的做法,这将是这样的:

aggregate(mpg ~ cyl + gear, 
      mtcars[!mtcars$cyl %in% 4 & !mtcars$gear %in% 4, ], 
      mean) 
+0

事实上,我没有注意到这一点。你知道这个选项有什么问题吗? –

+0

@MatthewLundberg,不知道我自己 - 我没有看过'stats ::: aggregate.formula'的代码,看看它是如何实现的。 – A5C1D2H2I1M1N2O1R2T1