Data:
x <- data.table(Tab.No = c(1,1,2), Survey.Date = as.Date(c("2015-5-26","2015-6-15","2015-4-03")))
y <- data.table(AC.Name = c("abc","xyz","qwe"),
Mandal.Name = c("def","pqr","rty"),
Village.Name = c("def","pqr","rty"),
Tab.No = c(1,1,2),
Survey.Start.Date = as.Date(c("2015-5-30","2015-5-01","2015-5-05")),
Survey.End.Date = as.Date(c("2015-6-30","2015-5-29","2015-6-30")))
我首先将 X 合并到 Y 上,测试条件,然后将左连接返回到 x 数组上:
使用数据表:
merge(x,merge(y,x,by = "Tab.No")[Survey.Date >= Survey.Start.Date & Survey.Date <= Survey.End.Date, list(Tab.No,AC.Name,Mandal.Name,Village.Name,Survey.Date)], by = c("Tab.No","Survey.Date"), all.x = T)
serial date add1 add2
1: 1 2015-05-26 xyz pqr
2: 1 2015-06-15 abc def
3: 2 2015-04-03 NA NA
如果您不熟悉 data.table,可以更清楚地分解一下:
z <- merge(y,x,by = "Tab.No")[Survey.Date >= Survey.Start.Date & Survey.Date <= Survey.End.Date, list(Tab.No,AC.Name,Mandal.Name,Village.Name,Survey.Date)]
merge(x,z, by = c("Tab.No","Survey.Date"), all.x = T)
请注意,我忽略了NA
x 框架中的列,它们在开始时是不必要的