我的问题的完美答案已经存在,作为@akrun对此问题的第一个答案Sum variable between dates in R?
@akrun的答案正是我所要寻找的,但是当我使用原始问题中的示例数据运行代码时,我没有得到两个日期之间的值列的总和,而是得到了日期间隔中的最后一个值...
有什么建议吗?
示例数据:
df1 <- data.frame(Start = as.Date(c('1/1/20', '5/1/20', '10/1/20', '2/2/21', '3/20/21'),"%m/%d/%y"), End = as.Date(c('1/7/20', '5/7/20', '10/7/20', '2/7/21', '3/30/21'),"%m/%d/%y"))
df2 <- data.frame(Date = as.Date(c('1/1/20','1/3/20' ,'5/1/20','5/2/20','6/2/20' ,'6/4/20','10/1/20', '2/2/21', '3/20/21'),"%m/%d/%y"),value=as.numeric(c('1','2','5','15','20','2','3','78','100')))
@akrun代码:
setDT(df1)[df2, value := sum(value),
on = .(Start <= Date, End >= Date), by = .EACHI]
2条答案
按热度按时间4ioopgfo1#
下面是一个
fuzzyjoin
解决方案:关键点是使用match_fun
函数:第一个
3lxsmp7m2#
我们可以反向执行连接