【发布时间】:2014-10-19 20:45:54
【问题描述】:
模拟数据:
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))
df1 包含感兴趣的国家/地区年份。我想获得这个国家年和前后 3 年的 myvar 值。
换句话说,合并是基于df2$country==df1$country AND df2$year > df1$year - 3 & df2$year < df1$year + 3 的条件完成的
编辑:我的(有效的,不优雅的)解决方案是填充 df1 以创建我感兴趣的所有国家/地区年份,然后以常规方式与 df2 合并。
library(plyr)
ddply(df1, c("country", "year"),
function(df) data.frame(rep(df$country, 7), (df$year-3):(df$year+3)))
生产
country year rep.df.country..7. X.df.year...3...df.year...3.
1 UK 2003 UK 2000
2 UK 2003 UK 2001
3 UK 2003 UK 2002
4 UK 2003 UK 2003
5 UK 2003 UK 2004
6 UK 2003 UK 2005
7 UK 2003 UK 2006
8 US 2000 US 1997
9 US 2000 US 1998
10 US 2000 US 1999
11 US 2000 US 2000
12 US 2000 US 2001
13 US 2000 US 2002
14 US 2000 US 2003
【问题讨论】:
-
现在没有时间给出完整的答案,但如果我可以的话,稍后会发布一个。如果您使用它们,请从包
data.table中查看新功能foverlaps。用来回答this question