サマリーテーブルを作成し、それを元の(小さい)データとマージするのが最も簡単です。再現可能な例を用意することをお勧めします。したがって、ここにいくつかの再現可能なデータがあります:
smaller_df <- data.frame(Date=seq(as.Date("2000-01-01"),
as.Date("2000-01-10"), by="1 day"))
set.seed(5)
larger_df <- data.frame(Date=sample(seq(as.Date("2000-01-01"),
as.Date("2000-01-20"), by="1 day"),
80, replace=TRUE))
の日付のテーブル(カウント)を作成しますlarger_df
tbl <- table(larger_df$Date)
これをマージに適したdata.frameに変換します
counts <- data.frame(Date=as.Date(names(tbl)), CountOfMatches=as.vector(tbl))
そして、日付にマージします。日付がに表示されていないがに表示されている場合は、larger_df
ではsmaller_df
なくになりCountOfMatches
ます。NA
0
merge(smaller_df, counts, all.x=TRUE)
このサンプルデータの場合、次のようになります。
> merge(smaller_df, counts, all.x=TRUE)
Date CountOfMatches
1 2000-01-01 4
2 2000-01-02 2
3 2000-01-03 5
4 2000-01-04 4
5 2000-01-05 5
6 2000-01-06 6
7 2000-01-07 2
8 2000-01-08 5
9 2000-01-09 3
10 2000-01-10 3
編集:
パッケージ(変換の詳細の一部を取り除く便利な関数を提供する)を使用するより簡潔なバージョンは次のとおりです。
library("plyr")
merge(smaller_df,
ddply(larger_df, .(Date), summarise, CountOfMatches=length(Date)),
all.x = TRUE)
同じ結果、そして事実上、同じロジック。また、に表示されない日付についても同じ注意が必要ですlarger_df
。