有一个简单的聚合:
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.在第一行,ID为2的原因是什么?
2.在第二行,为什么ID为6?
答案 0 :(得分: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