1

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

月份看起来像这样:

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

我想基本上每次“人物”中的条目具有特定的月份和站点组合时将它们组合起来,它被添加到适当的聚合数据框中,所以我会得到如下内容:

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

但我对如何去做这件事一无所知。有什么建议么?

4

2 回答 2

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
于 2013-02-19T12:51:44.797 回答
2

假设您data.frame的 s 是monthsand people,这是一个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
于 2013-02-19T12:50:24.467 回答