描述
将数据划分为多个子集,为每个子集计算汇总统计信息,并以方便的形式返回结果。
用法
aggregate(x, ...)
## 默认S3方法:
aggregate(x, ...)
##类型为数据框(data.frame)的S3方法:
aggregate(x, by, FUN, ..., simplify = TRUE, drop = TRUE)
##类型为公式(formula)的S3方法:
aggregate(formula, data, FUN, ..., subset, na.action = na.omit)
##类型为时间序列(ts)的S3方法:
aggregate(x, nfrequency = 1, FUN = sum, ndeltat = 1, ts.eps = getOption("ts.eps"), ...)
参数
x:一个R对象
by:一个分组元素的列表,每个元素只要在数据框x中的变量。元素在使用之前被强制为因子。
FUN:计算可应用于所有数据子集的汇总统计信息的函数。
simplify:一种指示结果是否应尽可能简化为向量或矩阵的逻辑。
drop:指示是否删除未使用的分组值组合的逻辑。
非默认的大小写drop=FALSE已经在R 3.5.0中修改为删除未使用的组合。
formula:一种公式,如y ~ x或cbind(y1, y2) ~ x1 + x2,其中y变量是要根据x变量(通常是因数)分组的数字数据。
data:一种数据框(或列表),公式中的变量应从中选取。
subset:一个可选的向量,指定要使用的观察值的子集。
na.action:一个函数,指示当数据包含NA值时应该发生什么。默认是忽略给定变量中缺失的值。
nfrequency:每单位时间的新观测数;一定是x频率的除数。
ndeltat:连续观测之间抽样周期的新分数;一定是x的抽样区间的除数。
ts.eps:连续观测之间抽样周期的新分数;必须是x. ts.eps公差的采样间隔的除数,用于决定nfrequency是否为原始频率的子倍数。
...:传递给方法或由方法使用的进一步参数。
细节
Aggregate是一个泛型函数,具有用于数据框和时间序列的方法。
如果x是时间序列,则默认方法aggregate.default使用时间序列方法,否则将x强制到数据框并调用数据框方法。
Aggregate.data.frame是数据框方法。如果x不是一个数据框,它被强制为1,这必须有一个非零的行数。然后,x中的每个变量(列)被分解为by的相同组合的情况(行)的子集,FUN应用于每个这样的子集,并在…传递给它。结果重新格式化为一个数据框中包含变量和x。因的包含分组的独特组合值用于确定子集,并因x的相应的总结各自变量的子集的x。如果简化是真的,如果摘要的公共长度分别为1或大于1,则将其简化为向量或矩阵;否则,将得到按子集排列的汇总结果列表。任何by变量中缺少值的行将从结果中省略。(注意,2.11.0之前的R版本要求FUN是一个标量函数。)
aggregate.formula是一个用于aggregate.data.frame的标准公式接口。
aggregate.ts是时间序列方法,并要求FUN是一个标量函数。
如果x不是时间序列,它被强制为1。然后,x中的变量被分割成长度为frequency(x) / nfrequency的适当块,FUN被应用到每个这样的块中,进一步(命名)参数在…传递给它。返回的结果是一个时间序列,其频率nfrequency包含聚合的值。需要注意的是,当原始序列涵盖了整个季度或年份时,这对于季度或年度结果是最合理的:特别是将一个月度序列从2月份开始汇总到多个季度,并不会得出传统的季度序列。
FUN传递给match.fun,因此它可以是一个函数或符号或字符串命名一个函数。
值
对于时间序列法,类“ts”或类c(“mts”,“ts”)的时间序列。
对于数据框方法,一个数据框,其列对应于by中的分组变量,然后是x中的聚合列。如果by有名称,则使用非空时间标记结果中的列,将未命名的分组变量命名为Group.i对于by[[i]]。
例子
## Compute the averages for the variables in 'state.x77', grouped
## according to the region (Northeast, South, North Central, West) that
## each state belongs to.
aggregate(state.x77, list(Region = state.region), mean)
## Compute the averages according to region and the occurrence of more
## than 130 days of frost.
aggregate(state.x77,
list(Region = state.region,
Cold = state.x77[,"Frost"] > 130),
mean)
## (Note that no state in 'South' is THAT cold.)
## example with character variables and NAs
testDF <- data.frame(v1 = c(1,3,5,7,8,3,5,NA,4,5,7,9),
v2 = c(11,33,55,77,88,33,55,NA,44,55,77,99) )
by1 <- c("red", "blue", 1, 2, NA, "big", 1, 2, "red", 1, NA, 12)
by2 <- c("wet", "dry", 99, 95, NA, "damp", 95, 99, "red", 99, NA, NA)
aggregate(x = testDF, by = list(by1, by2), FUN = "mean")
# and if you want to treat NAs as a group
fby1 <- factor(by1, exclude = "")
fby2 <- factor(by2, exclude = "")
aggregate(x = testDF, by = list(fby1, fby2), FUN = "mean")
## Formulas, one ~ one, one ~ many, many ~ one, and many ~ many:
aggregate(weight ~ feed, data = chickwts, mean)
aggregate(breaks ~ wool + tension, data = warpbreaks, mean)
aggregate(cbind(Ozone, Temp) ~ Month, data = airquality, mean)
aggregate(cbind(ncases, ncontrols) ~ alcgp + tobgp, data = esoph, sum)
## Dot notation:
aggregate(. ~ Species, data = iris, mean)
aggregate(len ~ ., data = ToothGrowth, mean)
## Often followed by xtabs():
ag <- aggregate(len ~ ., data = ToothGrowth, mean)
xtabs(len ~ ., data = ag)
## Compute the average annual approval ratings for American presidents.
aggregate(presidents, nfrequency = 1, FUN = mean)
## Give the summer less weight.
aggregate(presidents, nfrequency = 1,
FUN = weighted.mean, w = c(1, 1, 0.5, 1))
aggregate(station1$discharge, by = list(station1$yearmon),mean)