聚合子集

时间:2014-07-13 22:46:18

标签: r aggregate

aggregate(value ~ Vertical+ OLorPL, mdata,sum,na.rm=TRUE)

上面的代码有效,但它在总和中包含一个“水平”列。我想汇总所有记录,汇总值,但不包括mdata $ Horizo​​ntal ==“xyz”的记录

2 个答案:

答案 0 :(得分: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

子集以删除“cyl”和“gear”等于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)

答案 1 :(得分:0)

只需从data

中排除这些记录即可
aggregate(value ~ Vertical+ OLorPL, mdata[mdata$Horizontal != 'xyz',],sum,na.rm=TRUE)