创建时间仓并将数据分配给正确的仓
Create time bins and assign data to correct bin
我想在 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。我希望能够创建一个包含时间仓列表的数据框,然后 'present' 或 'absent' 取决于是否存在属于任何时间仓内的数据点。
我认为我可以使用 interval 和 lubridate 来做到这一点,但我无法创建 bin 序列。我曾希望使用 %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.table
和 lubridate
解决这个问题,并坚持使用 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"]
我想在 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。我希望能够创建一个包含时间仓列表的数据框,然后 'present' 或 'absent' 取决于是否存在属于任何时间仓内的数据点。
我认为我可以使用 interval 和 lubridate 来做到这一点,但我无法创建 bin 序列。我曾希望使用 %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.table
和 lubridate
解决这个问题,并坚持使用 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"]