1

2 つの異なるデータ フレームがあります。それらを「月」と「人」と呼びましょう。

月は次のようになります。

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

People は次のようになります。

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あなたの がmonthsとであると仮定するとpeopledata.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 に答える