如果日期与 R 中的另一个数据框匹配,则获取最近 3 天的最大值?

get max maximum value of last 3 days if date matches from another dataframe in R?

我有两个数据框

df1= data.frame( ts = c('2020-01-15', '2020-01-16' , '2020-01-17', '2021-01-14', '2021-01-15','2021- 
                         01-16','2021-01-24','2021-01-25','2021-01-26'),
                aa_h=c(1,2,3,6,4,5,7,9,8),
                bh= c(12,13,14,11,11,11,122,12,56))

df2_mx=data.frame( ts = c('2020-01-17', '2021-01-16' , '2021-01-26'),
                aa= NA)

现在我想比较df1中df2_mx的日期,如果匹配,我想要最后一个aa_h的最大值两个和当天并将其插入 df2_mx

的“aa”列

例子

第 1 行,即 df2_mx 的“2020-01-17”将匹配 df1 的第 3 行,它将在 2 天以上查找并获得值 which_max(c(1, 2,3))--> 3 并将其插入 df2_mx .

的“aa”列

预期输出:

  df2_mx=data.frame( ts = c('2020-01-17', '2021-01-16' , '2021-01-26'),
                      aa= c(3,6,9))

试用码 n=1

for (i in 1:nrow(df1)){

 ifelse(which(as.Date(df1[i,1])==as.Date(df2_mx[,1])), 
oh_df_mx[which(as.Date(df1[i,1])==as.Date(df2_mx
[,1])),n+1]<-which.max(df1[(i-2):i,3]),invisible())
}

带有 fuzzyjoin 软件包的选项。

library(dplyr)

df1 %>%
  mutate(ts = as.Date(ts)) %>%
  fuzzyjoin::fuzzy_right_join(df2_mx %>%
                               mutate(ts = as.Date(ts), ts_2_day = ts - 2), 
                             by = c('ts', 'ts' = 'ts_2_day'), 
                             match_fun = c(`<=`, `>=`)) %>%
  group_by(ts = ts.y) %>%
  summarise(aa_h = max(aa_h, na.rm = TRUE))

#   ts          aa_h
#  <date>     <dbl>
#1 2020-01-17     3
#2 2021-01-16     6
#3 2021-01-26     9