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

如何合并两个具有相同日期和时间的R数据框?

解决方法:筛选共同时间组合后合并

要实现保留两个数据框中日期(Date)和时间(Time)完全匹配的所有行,你可以按照以下步骤操作:

步骤1:提取两个表中共同的(Date, Time)组合

首先需要找出同时存在于data1和data2中的日期+时间组合,这是筛选的关键条件:

library(dplyr)

# 获取共同的(Date, Time)键
common_dt <- inner_join(
  select(data1, Date, Time),
  select(data2, Date, Time),
  by = c("Date", "Time")
) %>% distinct()

步骤2:分别从两个表中筛选符合条件的行

基于上面得到的共同组合,从data1和data2中筛选出对应行:

# 筛选data1中符合条件的行
filtered_data1 <- data1 %>%
  semi_join(common_dt, by = c("Date", "Time"))

# 筛选data2中符合条件的行
filtered_data2 <- data2 %>%
  semi_join(common_dt, by = c("Date", "Time"))

步骤3:合并筛选后的结果

将两个筛选后的数据集行绑定,得到最终的data3:

data3 <- bind_rows(filtered_data1, filtered_data2)

# 查看结果
print(data3)

运行后得到的结果如下(修正了原示例中data3元素数量不一致的笔误):

Metal Type       Date     Time
1    Al    F 2000-01-01 11:00:00
2    Al    F 2000-01-03 13:00:00
3    Al    F 2000-01-03 17:00:00
4    Al    P 2000-01-01 11:00:00
5    Al    P 2000-01-03 13:00:00
6    Al    P 2000-01-03 17:00:00

为什么之前的join操作没得到预期结果?

  • 直接用inner_join合并两个表会生成笛卡尔积(同一时间组合在两表各有一行时,会合并成一行而非保留两行);
  • semi_join仅保留左表的匹配行,无法同时获取两表数据;
  • full_join会保留所有行,不符合你只保留共同时间组合的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:18:09