最简单的方法是创建一个汇总表,然后将其与您的原始(较小)数据合并。最好有一个可重现的例子。所以这里有一些可重现的数据:
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
.