You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中按同日月匹配基准年计算DataFrame的BenchDiff

解决方案

要批量实现按2018年基准值计算差值,核心是先提取日期的月日部分作为匹配键,再将每行数据与同地区、同变量下2018年对应月日的基准值关联,最后计算差值。以下是完整的dplyr实现代码:

library(dplyr)

# 1. 创建基准表(仅保留2018年数据,提取月日作为匹配标识)
benchmark_df <- df %>%
  mutate(month_day = format(Date, "%m-%d")) %>%
  filter(substr(Date, 1, 4) == "2018") %>%
  select(GEO, Variable, month_day, benchmark_value = Value)

# 2. 关联基准表并计算BenchDiff
result_df <- df %>%
  mutate(month_day = format(Date, "%m-%d")) %>%
  left_join(benchmark_df, by = c("GEO", "Variable", "month_day")) %>%
  mutate(BenchDiff = Value - benchmark_value) %>%
  select(-month_day) # 可选:移除中间生成的month_day辅助列

# 查看最终结果
print(result_df)

输出结果

DateGEOVariableValueBenchDiff
2017-06-01USAGDP100-300
2018-06-01USAGDP4000
2019-06-01USAGDP600200
2017-07-01USAGDP5-2
2018-07-01USAGDP70
2019-07-01USAGDP103

代码说明

  • 用format(Date, "%m-%d")提取月日信息,确保不同年份的同月同日能精准匹配;
  • 基准表仅保留2018年数据,避免重复匹配干扰计算;
  • left_join保证原表所有行都能保留,同时自动关联对应基准值;
  • 如果数据中存在2018年未覆盖的月日记录,BenchDiff会显示NA,可按需用replace_na(BenchDiff, 0)这类逻辑处理缺失值。

内容的提问来源于stack exchange,提问作者user15032839

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 16:15:22