2011-09-16 44 views

回答

9

跳转到的help(aggregate)示例部分的中间,你会看到:

## 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) 

四种不同的呼叫aggregate(),全部采用公式接口。它上面你引述与使用整个R.

考虑的第一个例子方法调度机制做书面方式:

R> class(weight ~ feed) 
[1] "formula" 
R> class(chickwts) 
[1] "data.frame" 

它第一个参数(formula类的),所以总调度。公式在R中得到解决的方式通常围绕着model.matrix,我假设类似的情况发生在这里,并且等效呼叫最终由aggregate.data.frame执行,使用第二个参数chickwtsdata.frame

R> aggregate(weight ~ feed, data = chickwts, mean) 
     feed weight 
1 casein 323.583 
2 horsebean 160.200 
3 linseed 218.750 
4 meatmeal 276.909 
5 soybean 246.429 
6 sunflower 328.917 
R> 

你问什么是不是最简单的新手问题,我建议你在一些文件和体面[R本书的一个很好的详尽说明,如果你有一个方便。 (和其他SO问题给予建议,为下一步该阅读。)

编辑:我得深入一点作为aggregate.formula()不是从stats命名输出,但是你可以通过在提示符下键入stats:::aggregate.formula看看吧 - 这则清楚地表明确实如此,事实上,派遣aggregate.data.frame()

[.... some code omitted ...] 
    if (is.matrix(mf[[1L]])) { 
     lhs <- as.data.frame(mf[[1L]]) 
     names(lhs) <- as.character(m[[2L]][[2L]])[-1L] 
     aggregate.data.frame(lhs, mf[-1L], FUN = FUN, ...) 
    } 
    else aggregate.data.frame(mf[1L], mf[-1L], FUN = FUN, ...) 
} 
<environment: namespace:stats> 
R> 
+4

有没有办法做到这一点不点名的所有列在'cbind()返回'?对于多列,我想我不明白为什么不能做'aggregate(。〜var,...)'或者名字< - c(“var1”,“var2”,...)'然后'聚合(df [,名称]〜var,...)'。或者这是不可能的? – Hendy