R语言 如何根据df1中的开始和结束日期,在df1中创建一个新变量,该变量是df2中的变量之和?

ep6jt1vc  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(139)

我的问题的完美答案已经存在,作为@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]
4ioopgfo

4ioopgfo1#

下面是一个fuzzyjoin解决方案:关键点是使用match_fun函数:
第一个

3lxsmp7m

3lxsmp7m2#

我们可以反向执行连接

library(data.table)
setDT(df2)[df1, .(value = sum(value)), 
     on = .(Date >= Start, Date <= End ), by = .EACHI]

相关问题