在R语言中筛选并整理同日期时间匹配的数据集对
解决方案:匹配时间对齐的数据集并整理格式
步骤1:加载依赖并处理数据集去重
先用dplyr对两个原始数据集内部的重复项去重,仅保留每个Metal, Type, Date, Time组合的唯一记录:
library(dplyr) # 对data1去重,保留唯一时间组合的记录 data1_unique <- data1 %>% distinct(Metal, Type, Date, Time, .keep_all = TRUE) # 对data2执行相同去重操作 data2_unique <- data2 %>% distinct(Metal, Type, Date, Time, .keep_all = TRUE)
步骤2:筛选双方共有的时间点
通过拼接Date和Time字符串,找到两个数据集都存在的时间组合,确保只保留互相匹配的记录:
# 获取两个数据集共有的Date+Time组合 common_time_pairs <- intersect( paste(data1_unique$Date, data1_unique$Time), paste(data2_unique$Date, data2_unique$Time) )
步骤3:合并并整理成交替排列格式
筛选出符合共有时间的记录,合并后按时间分组,每组内按Type(F在前、P在后)排序,最终得到交替排列的结果:
data3 <- bind_rows( # 筛选data1中符合共有时间的记录 data1_unique %>% filter(paste(Date, Time) %in% common_time_pairs), # 筛选data2中符合共有时间的记录 data2_unique %>% filter(paste(Date, Time) %in% common_time_pairs) ) %>% # 按时间分组,每组内按Type排序(F优先) group_by(Date, Time) %>% arrange(Type, .by_group = TRUE) %>% ungroup() %>% # 整体按时间顺序排列 arrange(Date, Time)
验证结果
运行上述代码后,data3的输出与期望结果一致(注:你提供的期望输出中2001-01-07应为笔误,实际会输出2000-01-07):
print(data3) # 输出: # # A tibble: 8 × 5 # Metal Type Date Time Value # <chr> <chr> <chr> <chr> <dbl> # 1 Al F 2000-01-01 11:00:00 100 # 2 Al P 2000-01-01 11:00:00 100 # 3 Al F 2000-01-03 13:00:00 100 # 4 Al P 2000-01-03 13:00:00 100 # 5 Al F 2000-01-03 17:00:00 400 # 6 Al P 2000-01-03 17:00:00 900 # 7 Al F 2000-01-07 20:00:00 500 # 8 Al P 2000-01-07 20:00:00 999
内容的提问来源于stack exchange,提问作者Sarah
相关产品推荐
相关产品推荐

