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

如何基于df1的日期将多个DataFrame的Value列合并至df1?

多DataFrame按日期合并为宽表解决方案

问题背景

拥有8-10个包含Date和Value列的DataFrame:

  • df1已完成连续日期补全(缺失值设为0),日期范围覆盖目标宽表的完整周期
  • 其余DataFrame(如df2、df3)起始/结束日期与df1不同,部分存在同一日期多条记录的情况

需要将所有DataFrame的Value列按日期对应,合并到df1的日期序列上,生成包含所有Value列的宽表。

分步实现代码

1. 加载依赖包并标准化处理所有DataFrame

首先确保所有DataFrame的日期格式统一为Date类型,同时处理重复日期的记录(以求和为例,可根据需求调整聚合逻辑):

library(tidyverse)

# 处理df1:转换日期格式+补全连续日期
df1 <- read_table("Date Value_df1
       01-01-2020 1200
       02-01-2020 1300
       03-01-2020 1240
       06-01-2020 3900
       31-12-2020 2000") %>%
  mutate(Date = dmy(Date)) %>%
  complete(Date = seq.Date(min(Date), max(Date), by = "day"), 
           fill = list(Value_df1 = 0))

# 处理df2:转换日期+聚合重复日期记录
df2 <- read_table("Date Value_df2
    03-01-2020 120
    04-01-2020 130
    06-01-2020 140
    06-01-2020 150
    08-01-2020 1657
    30-12-2020 6000") %>%
  mutate(Date = dmy(Date)) %>%
  group_by(Date) %>%
  summarise(Value_df2 = sum(Value_df2), .groups = "drop")

# 按同样逻辑处理df3至df10,确保每个df的Value列名唯一(如Value_df3、Value_df4...)

2. 合并所有DataFrame生成宽表

将处理好的所有DataFrame放入列表,通过reduce函数依次左连接到df1的日期基准上,最后填充所有缺失值为0:

# 将所有处理完成的DataFrame存入列表
all_dfs <- list(df1, df2, df3, df4, df5, df6, df7, df8, df9, df10)

# 合并生成最终宽表
final_wide_df <- all_dfs %>%
  reduce(left_join, by = "Date") %>%
  mutate(across(starts_with("Value"), ~replace_na(., 0)))

关键说明

  • 日期格式转换:使用dmy()函数将字符型日期转为标准Date类型,确保跨DataFrame的日期匹配准确
  • 重复日期处理:若某DataFrame同一日期有多条记录,需先按日期聚合(求和、均值等),避免合并后出现重复行
  • 列名规范:确保每个DataFrame的Value列名唯一(如Value_df1、Value_df2),避免合并时列名冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:00:53