【发布时间】:2022-01-03 03:37:33
【问题描述】:
我有两个数据框:
在 DF1 中,对于每个 ID,param 已在不同日期记录。
在 DF2 中,对于每个 ID,都会给出多个日期。
对于每个ID,我想根据日期从DF1 中获取所有相应的param 和value:
value 对应于给定参数的最新date1(在DF1)之前date2(在DF2)或
如果没有这样的date1,则最近的value 之后 date2。
DF1 是(我已经用 * 标记了结果的正确行):
ID date1 param value
1 id1 1/1/2020 pA pA_1_1
2 id1 2/1/2020 pA pA_1_2 *
3 id1 17/1/2020 pA pA_1_3
4 id1 20/1/2020 pB pB_1_1 *
5 id1 21/1/2020 pB pB_1_2
6 id2 21/12/2022 pA pA_2_1 *
7 id2 22/12/2022 pA pA_2_2
8 id2 18/12/2022 pB pB_2_1 *
9 id2 19/12/2022 pB pB_2_2
DF2 是:
ID date2
1 id1 15/1/2020
2 id2 20/12/2020
结果应该是:
ID date2 param value date1
1 id1 15/1/2020 pA pA_1_2 2/1/2020
2 id1 15/1/2020 pB pB_1_1 20/1/2020
3 id2 20/12/2020 pA pA_2_1 21/12/2022
4 id2 20/12/2020 pB pB_2_1 18/12/2022
重现DF1和DF2的代码:
DF1= data.frame(
stringsAsFactors = FALSE,
ID = c("id1","id1","id1","id1",
"id1","id2","id2","id2","id2"),
date1 = c("1/1/2020","2/1/2020",
"17/1/2020","20/1/2020","21/1/2020","21/12/2022",
"22/12/2022","18/12/2022","19/12/2022"),
param = c("pA", "pA", "pA", "pB", "pB", "pA", "pA", "pB", "pB"),
value = c("pA_1_1","pA_1_2","pA_1_3",
"pB_1_1","pB_1_2","pA_2_1","pA_2_2","pB_2_1","pB_2_2")
)
DF2=data.frame(
stringsAsFactors = FALSE,
ID = c("id1", "id2"),
date2 = c("15/1/2020", "20/12/2020")
)
【问题讨论】:
-
请检查 ID2 参数 pB 是否应该是第 9 行而不是第 8 行。因为 row8 是 date2 之后的最小日期。