组合单个和聚合级别的数据集

时间:2013-02-19 12:38:22

标签: r

我有两个不同的数据框,我们称之为“月”和“人”。

月份看起来像这样:

Month   Site   X
1       1      4
2       1      3
3       1      5
1       2      10
2       2      7
3       2      5

和人们看起来像这样:

ID   Month   Site
1    1       1
2    1       2
3    1       1
4    2       2
5    2       2
6    2       2
7    3       1
8    3       2

我想将它们组合在一起,所以每次“People”中的条目都有特定的Month和Site组合时,它会被添加到相应的聚合数据框中,所以我会得到如下内容:

Month   Site   X   People
1       1      4   2
2       1      3   0
3       1      5   1
1       2      10  1
2       2      7   3
3       2      5   1

但我对如何做到这一点并不是最模糊的想法。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

使用基础包

> aggregate( ID ~ Month + Site, data=People, FUN = length )
  Month Site ID
1     1    1  2
2     3    1  1
3     1    2  1
4     2    2  3
5     3    2  1
> res <- merge(Months, aggdata, all.x = TRUE)

> res
  Month Site  X ID
1     1    1  4  2
2     1    2 10  1
3     2    1  3 NA
4     2    2  7  3
5     3    1  5  1
6     3    2  5  1
> res[is.na(res)] <- 0
> res
  Month Site  X ID
1     1    1  4  2
2     1    2 10  1
3     2    1  3  0
4     2    2  7  3
5     3    1  5  1
6     3    2  5  1

答案 1 :(得分:2)

假设您的data.framemonthspeople,这是一个data.table解决方案:

require(data.table)
m.dt <- data.table(months, key=c("Month", "Site"))
p.dt <- data.table(people, key=c("Month", "Site"))
# one-liner
dt.f <- p.dt[m.dt, list(X=X[1], People=sum(!is.na(ID)))]

> dt.f

#    Month Site  X People
# 1:     1    1  4      2
# 2:     1    2 10      1
# 3:     2    1  3      0
# 4:     2    2  7      3
# 5:     3    1  5      1
# 6:     3    2  5      1