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

基于多字段及日期匹配合并DataFrame并累加指定数值

用R实现DataFrame匹配累加需求

核心思路

把df1拆成两组:一组是Date等于StartDate的记录,另一组是Date等于EndDate的记录,分别和df2做匹配关联,把对应的n值累加后,再合并回原df2的Totals字段里。

代码实现

先确保你已经加载了dplyr包(未安装的话先执行install.packages("dplyr")):

library(dplyr)

# 处理Date匹配StartDate的情况,计算每个分组的n总和
start_match <- df1 %>%
  inner_join(df2, by = c("Location", "Sub Location")) %>%
  filter(Date == StartDate) %>%
  group_by(Location, `Sub Location`, StartDate, EndDate) %>%
  summarise(start_n = sum(n), .groups = "drop")

# 处理Date匹配EndDate的情况
end_match <- df1 %>%
  inner_join(df2, by = c("Location", "Sub Location")) %>%
  filter(Date == EndDate) %>%
  group_by(Location, `Sub Location`, StartDate, EndDate) %>%
  summarise(end_n = sum(n), .groups = "drop")

# 合并匹配结果到原df2,完成Totals累加
result_df <- df2 %>%
  left_join(start_match, by = c("Location", "Sub Location", "StartDate", "EndDate")) %>%
  left_join(end_match, by = c("Location", "Sub Location", "StartDate", "EndDate")) %>%
  # 填充缺失值为0,避免NA干扰计算
  mutate(
    start_n = ifelse(is.na(start_n), 0, start_n),
    end_n = ifelse(is.na(end_n), 0, end_n),
    Totals = Totals + start_n + end_n
  ) %>%
  # 移除临时生成的字段
  select(-start_n, -end_n)

为什么不用循环/ifelse?

循环处理大数据量时效率极低,还容易因为索引匹配出错;单纯的ifelse很难处理多条件的分组累加场景。用dplyr的关联+分组操作,逻辑清晰且高效,能避免手动循环的索引bug,同时支持重复分组的正确累加。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:01:04