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

R语言如何根据另一数据框的时间条件填充目标数据框

R语言实现数据框时间槽匹配填充方案

实现逻辑

  • 先统一所有时间字段的格式为POSIXt类型,避免字符串匹配误差
  • 确定每个时间槽的匹配规则:某个时间槽t对应的区间为[t, t+3小时)
  • 初始化DF1所有数值单元格为0,匹配到对应记录再赋值为1
  • 遍历DF2的所有记录,逐一匹配站点与所属时间槽,完成赋值

可运行代码示例

# 加载时间处理包(可选,基础R也可实现,lubridate处理时间更便捷)
library(lubridate)

# ---------------------- 构造示例测试数据 ----------------------
# 构造空白DF1
DF1 <- data.frame(
  Site = c("BMA", "BMC", "MCA", "MCC"),
  "2021-01-01 00:00:00" = NA,
  "2021-01-01 03:00:00" = NA,
  "2021-01-01 06:00:00" = NA,
  "2021-01-01 09:00:00" = NA,
  check.names = FALSE # 避免列名被R自动修改
)

# 构造示例DF2,可替换为你的真实数据
DF2 <- data.frame(
  ImageDate = c("2021-01-01 01:23:00", "2021-01-01 04:56:00", "2021-01-01 07:12:00", "2021-01-01 00:05:00"),
  SiteName = c("BMA", "BMC", "MCA", "MCC")
)
# ----------------------------------------------------------

# 1. 统一转换时间格式
# 提取DF1的时间槽列表,转成POSIXct格式
time_slots <- as.POSIXct(colnames(DF1)[-1], tz = "UTC")
# 转换DF2的影像拍摄时间为POSIXct格式
DF2$ImageDate <- as.POSIXct(DF2$ImageDate, tz = "UTC")

# 2. 初始化DF1所有数值单元格为0(无匹配默认值)
DF1[,-1] <- 0

# 3. 遍历DF2记录匹配赋值
for(i in 1:nrow(DF2)){
  # 取出当前记录的站点和拍摄时间
  cur_site <- DF2$SiteName[i]
  cur_time <- DF2$ImageDate[i]
  # 匹配所属时间槽:找到最后一个小于等于当前时间的时间槽
  slot_idx <- findInterval(cur_time, time_slots)
  # 过滤无效匹配(拍摄时间不在所有时间槽覆盖范围内的直接跳过)
  if(slot_idx >=1 && slot_idx <= length(time_slots)){
    # 给对应单元格赋值为1
    DF1[DF1$Site == cur_site, slot_idx + 1] <- 1
  }
}

# 输出最终结果
print(DF1)

注意事项

  • 请统一所有时间的时区,避免时区不同导致的匹配错误,示例中用的是UTC时区,你可以根据实际需求修改
  • 如果数据量较大、时间槽数量多,也可以用dplyr、tidyr的长表转换方案实现,运行效率会比循环更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:18:01