R语言下如何匹配两数据框日期计算3天aa_h最大值并填充
R语言需求实现代码方案
第一步:统一日期格式,消除字符串匹配误差
将两个数据框的ts列从字符型转为Date类型,避免因格式不一致导致的匹配失效:df1$ts <- as.Date(df1$ts)df2_mx$ts <- as.Date(df2_mx$ts)第二步:实现规则要求的3观测窗口最大值计算
按照“匹配当日 + 向前追溯2个观测”的规则,为df1的每一行预计算对应窗口的aa_h最大值,同时做边界索引兼容处理,避免行号小于3时出现负索引报错:# 窗口计算函数 calc_window_max <- function(current_row, value_col, window_size = 3) { # 计算窗口有效起始行,索引不小于1 start_row <- max(1, current_row - (window_size - 1)) max(value_col[start_row:current_row]) } # 为df1新增预计算的窗口最大值列 df1$window_aa_max <- sapply(1:nrow(df1), calc_window_max, value_col = df1$aa_h)第三步:关联日期完成结果赋值
通过日期匹配将计算好的窗口最大值写入df2_mx的aa列:df2_mx$aa <- df1$window_aa_max[match(df2_mx$ts, df1$ts)]
运行后校验输出结果,完全匹配预期:
> df2_mx ts aa 1 2020-01-17 3 2 2021-01-16 6 3 2021-01-26 9
- 原尝试代码的问题说明:
- 未做索引边界判断,当遍历行号小于3时,
(i-2):i会生成负索引,取出错误的取值区间 - 变量名书写错误,将
df2_mx误写为oh_df_mx - 误用
which.max函数:该函数返回最大值所在的位置序号,而非最大值本身,赋值结果不符合计算要求
- 未做索引边界判断,当遍历行号小于3时,
内容的提问来源于stack exchange,提问作者Amit
相关产品推荐
相关产品推荐

