多条件下不同数据集单列相减实现:匹配日期后按小时条件计算CO2差值
双数据集匹配计算方案
实现逻辑
- 统一两个数据集的日期字段格式与命名,确保匹配准确性
- 按日期字段关联两个数据集
- 筛选满足
data1小时 ≤ data2小时的匹配结果 - 计算CO2差值:
data1的CO2值 - data2的CO2值
R语言实现代码
tidyverse(dplyr)版本(代码更易读)
# 加载依赖包 library(dplyr) # 可选:统一日期格式,避免字符串匹配错误 data1$date <- as.Date(data1$date, format = "%m/%d/%Y") data2$Date <- as.Date(data2$Date, format = "%m/%d/%Y") # 关联并计算结果 result <- data1 %>% inner_join(data2, by = c("date" = "Date"), suffix = c("_d1", "_d2")) %>% filter(Hour_d1 <= Hour_d2) %>% mutate(CO2_diff = CO2_d1 - CO2_d2)
base R版本(无需安装额外包)
# 可选:统一日期格式 data1$date <- as.Date(data1$date, format = "%m/%d/%Y") data2$Date <- as.Date(data2$Date, format = "%m/%d/%Y") # 关联数据集 merged_df <- merge(data1, data2, by.x = "date", by.y = "Date", suffixes = c("_d1", "_d2")) # 筛选符合条件的行 filtered_df <- merged_df[merged_df$Hour_d1 <= merged_df$Hour_d2, ] # 计算差值 filtered_df$CO2_diff <- filtered_df$CO2_d1 - filtered_df$CO2_d2
说明
- 使用
inner_join/merge默认返回两个数据集日期完全匹配的行,如果需要保留data1的所有行,可将inner_join改为left_join,或在merge中添加参数all.x = TRUE suffix参数用来区分两个数据集重名的Hour、CO2字段,避免关联后字段冲突- 最终结果中的
CO2_diff字段就是所需的计算值
内容的提问来源于stack exchange,提问作者Rajan Dhakal
相关产品推荐
相关产品推荐

