我有两个表,如下所示:
table_A
x | date
1 03/06
1 03/15
2 12/04
3 06/23
3 10/05
table_B
x | y | start_date | end_date
1 a 03/02 03/08
1 b 03/09 03/20
1 c 03/21 12/30
2 j 01/08 12/10
3 i 06/21 07/30
3 h 07/31 12/30
我想通过首先将 table_A的x 与 table_B的x 相匹配,并确保日期在table_B的start_date和end_date之内,将'y'列添加到table_A ,然后返回对应的y 。
table_A
x | date | y
1 03/06 a
1 03/15 b
2 12/04 j
3 06/23 i
3 10/05 h
如果能帮助我,那就太好了,谢谢!
答案 0 :(得分:1)
您可能需要as.Date
和适合您目的的时间格式(format = "%m/%d"
)。然后,您可以简单地测试每个特定的日期是否在每个时间范围内,并返回匹配的输出。
a <- read.table(text="
x date
1 03/06
1 03/15
2 12/04
3 06/23
3 10/05", header=T, stringsAsFactors=F)
b <- read.table(text="
x y start_date end_date
1 a 03/02 03/08
1 b 03/09 03/20
1 c 03/21 12/30
2 j 01/08 12/10
3 i 06/21 07/30
3 h 07/31 12/30", header=T, stringsAsFactors=F)
out <- NULL
for (i in 1:nrow(a)){
test <- (as.Date(a$date[i], format = "%m/%d") > as.Date(b$start_date, format = "%m/%d") &
as.Date(a$date[i], format = "%m/%d") < as.Date(b$end_date, format = "%m/%d") & a$x[i]==b$x)
out <- c(out, b$y[test])
}
a$y <- out
a
x date y
1 1 03/06 a
2 1 03/15 b
3 2 12/04 j
4 3 06/23 i
5 3 10/05 h