2012-12-30 59 views
0

有一个简单的汇总:为什么将聚合函数应用于分组列?

dat = read.table(textConnection(
    'ID value 
    1 4 
    1 7 
    2 8 
    2 3 
    2 3'), header = TRUE) 

aggregate(dat,by=list("type"=dat$ID),sum) 

我得到的结果输出:

 type ID value 
    1 1 2 11 
    2 2 6 14 

我想知道:
1.in第一行,为什么ID为2?
2.在第二行,为什么ID是6?

回答

2

您要求每列的总和,由dat$ID汇总。使用这个接口,将包括所有列。 dat$ID只是一个向量,因此ID列不会从聚合结果中删除。功能sum也适用于每个组内的ID

对于第一行,您计算with(dat, sum(ID[dat$ID==1]))或1 + 1。
第二行,你的计算with(dat, sum(ID[dat$ID==2]))或2 + 2 + 2
(我在每个索引指定dat$ID,而不是ID,因为这是你的aggregate呼叫做是故意的。)

使用公式接口aggregate更清洁,并给出你想要的。使用这个接口,aggregate给出value列的总和,与ID因为它出现在每一个聚合基团:

> aggregate(value ~ ID, data=dat, sum) 
    ID value 
1 1 11 
2 2 14 
相关问题