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.在第一行,为什么ID是2?
2.在第二行,为什么ID是6?

4

1 回答 1

2

您请求了每列的总和,按 聚合dat$ID。使用此界面,将包括所有列。 dat$ID只是一个向量,因此ID不会从聚合结果中删除该列。该功能sum也适用ID于每个组内。

对于第一行,您正在计算with(dat, sum(ID[dat$ID==1]))或 1+1。
对于第二行,您正在计算with(dat, sum(ID[dat$ID==2]))or 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
于 2012-12-30T02:29:44.157 回答