如何合并两个具有相同日期和时间的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
相关产品推荐
相关产品推荐

