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

按ID将数据匹配到最近小时时间戳并保留amount属性的实现方法

按ID匹配最近小时时间戳的data.table解决方案

我来帮你搞定这个按ID匹配最近小时时间戳的需求,用data.table可以高效实现,步骤如下:

1. 先处理时间格式一致性

首先得确保你的test数据集里的time列和intervals是同一种时间类型(POSIXct)且时区一致,不然匹配会出错:

library(data.table)

# 把test转成data.table,同时将字符型time转为POSIXct,时区和intervals保持一致
test <- setDT(test)[, time := as.POSIXct(time, tz = "America/Los_Angeles")]

2. 把参考时间戳转成data.table

我们需要把预先生成的intervals序列包装成data.table,方便后续连接操作:

intervals_dt <- data.table(interval = intervals)

3. 执行最近时间匹配

用data.table的非等值连接+roll = "nearest"参数,就能快速给每条test记录匹配到最近的小时时间戳,同时保留id和amount:

output <- intervals_dt[test, 
                       .(interval, id = i.id, amount = i.amount), 
                       roll = "nearest", 
                       on = c("interval" = "time")]

代码说明

  • on = c("interval" = "time"):指定用参考表的interval列和test表的time列做匹配依据
  • roll = "nearest":核心参数,让data.table自动找到距离当前时间最近的那个小时戳
  • i.id和i.amount:因为我们是用intervals_dt[test, ...]的语法,i.前缀表示取test表(也就是i表)里的对应列,避免列名冲突

举个例子,你test里那条2018-01-20 00:02:14 PST的记录,会被匹配到最近的2018-01-20 00:00:00 PST,输出结果里就会保留对应的id和amount,和你期望的格式完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:35:49