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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:55:15