合并适合在哪里?这听起来像是一个子集问题,除非我误解了这个问题(正如我经常承认的那样)
set.seed(1)
df1 <- data.frame(country=c("US", "UK"),
year=c(2000, 2003))
df2 <- data.frame(country=rep(c("US", "UK"), 10),
year=rep(2000:2009, 2),
myvar=rnorm(20))
f <- lapply(df1$country, function(x) {
tmp <- df2[df2$country == x, ]
tmp[abs(tmp$year - df1[df1$country == x, 'year']) <= 3, ]
})
do.call(rbind, f)
# country year myvar
# 1 US 2000 -0.62645381
# 3 US 2002 -0.83562861
# 11 US 2000 1.51178117
# 13 US 2002 -0.62124058
# 2 UK 2001 0.18364332
# 4 UK 2003 1.59528080
# 6 UK 2005 -0.82046838
# 12 UK 2001 0.38984324
# 14 UK 2003 -2.21469989
# 16 UK 2005 -0.04493361
EDIT
set.seed(1)
df1 <- data.frame(country=c("US", "UK"),
year=c(2000, 2003, 2009, 2009))
df2 <- data.frame(country=rep(c("US", "UK"), 10),
year=rep(2000:2009, 2),
myvar=rnorm(20))
f <- lapply(seq_len(nrow(df1)), function(x) {
y <- df1[x, 'country']
tmp <- df2[df2$country == y, ]
tmp[abs(tmp$year - df1[x, 'year']) <= 3, ]
})
do.call(rbind, f)
# country year myvar
# 1 US 2000 -0.62645381
# 3 US 2002 -0.83562861
# 11 US 2000 1.51178117
# 13 US 2002 -0.62124058
# 2 UK 2001 0.18364332
# 4 UK 2003 1.59528080
# 6 UK 2005 -0.82046838
# 12 UK 2001 0.38984324
# 14 UK 2003 -2.21469989
# 16 UK 2005 -0.04493361
# 7 US 2006 0.48742905
# 9 US 2008 0.57578135
# 17 US 2006 -0.01619026
# 19 US 2008 0.82122120
# 8 UK 2007 0.73832471
# 10 UK 2009 -0.30538839
# 18 UK 2007 0.94383621
# 20 UK 2009 0.59390132