2013-02-19 57 views
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 

但我还没有想到如何去做这件事。有什么建议么?

回答

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 
2

假设你data.frame s为monthspeople,这里有一个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