r - 创建时间箱并将数据分配给正确的箱



我想在 24 小时内创建一个 30 分钟时间箱的序列,我已经使用

seq(as.POSIXct("2018-03-25"). as.POSIXct("2018-03-26"), by = "30 min")

我有一组特定时间的数据,例如 25/03/2018 05:08和 25/03/2018 18:39。我希望能够创建一个带有时间箱列表的数据框,然后"存在"或"不存在",具体取决于是否存在属于任何时间箱的数据点。

我以为我可以使用带有润滑剂的间隔来做到这一点,但我无法创建箱的顺序。我曾希望使用%within%将数据点与箱匹配,但我对 R 相对较新,无法做到这一点。

我的数据如下所示,在不同位置(数据集中的站点)检测到鲨鱼。在我的实际数据中,我有 41894 个观察结果跨越三个月的时间,需要将这些观测值与 3 个月内每天的正确时间箱相匹配。

detect_date        Station  
25/03/2018 00:09    SS01   
25/03/2018 01:17    SS03 
25/03/2016 14:37    SS04 
25/03/2016 23:43    SS04

我最终想要的输出如下所示。

bin                Location  
25/03/2018 00:00    SS01 
25/03/2018 00:30   Absent 
25/03/2018 01:00    SS03

真的很感激任何帮助!

我试图使用data.tablelubridate并坚持我使用floor_date的想法来解决这个问题。

# load packages
library(data.table)
library(lubridate)
# define a vector evenly spaced each 30 minutes:
b <- data.table(dates = seq(as.POSIXct("2018-03-25", tz = "UTC"), 
as.POSIXct("2018-03-26", tz = "UTC"), 
by = "30 min"))
# reproduce data
dt <- data.table(detect_date = as.character(c("25/03/2018 00:09", "25/03/2018 01:17", "25/03/2016 14:37", "25/03/2016 23:43")), 
Station = c("SS01", "SS03", "SS04", "SS04"), 
Individual = c("A", "B", "C", "B"))
# convert detect_date to date format
dt[, detect_date := dmy_hm(detect_date)]
# make a join
dt[, .(Location = Station, Individual), by = .(dates = floor_date(detect_date, "30 minutes"))][b, on = "dates"]

最新更新