2012-12-30 55 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 
相關問題