【发布时间】:2025-12-29 16:45:16
【问题描述】:
我想选择最接近日期 A 的日期(在日期 B 中),然后使用这些匹配项创建一个新数据框。每个 ID 可以有多行(即多个日期组合)。我正在使用 dplyr 和 data.table 包
dataframe A
ID DATE A
3 15/05/06
5 14/11/05
8 25/11/08
1 16/12/10
1 5/01/12
1 24/07/14
dataframe B
ID DATE B
3 12/12/05
3 17/04/06
5 25/07/05
5 26/09/05
5 1/12/05
8 12/09/08
8 13/11/08
8 23/12/08
8 31/03/09
1 26/11/10
1 12/08/11
1 12/11/11
1 14/03/14
1 8/08/14
Resultant dataframe:
ID DATE A DATE B
3 15/05/06 17/04/06
5 14/11/05 1/12/05
8 25/11/08 13/11/08
1 16/12/10 26/11/10
1 5/01/12 12/11/11
1 24/07/14 8/08/14
【问题讨论】:
-
我正在结束您的一个较早的问题,因为接受的答案完全符合只需稍作调整(
dfb[dfa, on=.(ID, Date), roll="nearest", mult="first", nomatch=0L][, .SD, .SDcols=c("ID", "DATEA", "DATEB")]一旦您的数据框转换为 data.tables 并且正确定义了日期。 -
@Cath 谢谢Cath。我首先使用了 David Arunberg 提供的这个答案 # Create range columns dfa[, c("Date_m_180", "Date_p_180") := .(Date - 180L, Date + 180L)] # Join away indx = Date_m_180, Date
-
谢谢凯丝。我首先使用了@David Arunberg indx = Date_m_180, Date 180 天的那些。我正在尝试找出如何结合这两个代码。你有什么建议吗?
-
错字@David Arenburg
-
似乎没有办法同时使用 roll= 180 和 roll="nearest"
标签: r date merge dplyr data.table