這是最簡單的創建一個彙總表,然後合併,在與你原來的(小)的數據。有一個可重複的例子更好。因此,這裏是一些重複性的數據:
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
中的日期也是同樣的警告。
我有什麼工作,它很醜陋,我敢肯定有一個更好的解決辦法,所以我覺得這個問題是仍然有效。我的破解是:smaller_df $ CountOfMatches < - apply(smaller_df,1,function(row){nrow(subset(larger_df,Date == row [1]))}) – gatapia