【发布时间】:2018-02-04 05:14:59
【问题描述】:
我有一个带有H:M 格式(“时间”)时间戳的数据框(“观察”)。在第二个数据帧(“间隔”)中,我有由“From”和“Till”变量定义的时间范围,也是H:M 格式。
我想计算每个区间内的观察次数。我一直在使用来自data.table 的between,当包含日期时,它一直在正常工作。
但是,现在我只有时间戳,没有日期。这会导致跨越午夜 (20:00 - 05:59) 的时间间隔出现一些问题。这些时间没有计入我尝试过的代码中。
以下示例
interval.data <- data.frame(From = c("14:00", "20:00", "06:00"), Till = c("19:59", "05:59", "13:59"), stringsAsFactors = F)
observations <- data.frame(Time = c("14:32", "15:59", "16:32", "21:34", "03:32", "02:00", "00:00", "05:57", "19:32", "01:32", "02:22", "06:00", "07:50"), stringsAsFactors = F)
interval.data
# From Till
# 1: 14:00:00 19:59:00
# 2: 20:00:00 05:59:00 # <- interval including midnight
# 3: 06:00:00 13:59:00
observations
# Time
# 1: 14:32:00
# 2: 15:59:00
# 3: 16:32:00
# 4: 21:34:00 # Row 4-8 & 10-11 falls in 'midnight interval', but are not counted
# 5: 03:32:00 #
# 6: 02:00:00 #
# 7: 00:00:00 #
# 8: 05:57:00 #
# 9: 19:32:00
# 10: 01:32:00 #
# 11: 02:22:00 #
# 12: 06:00:00
# 13: 07:50:00
library(data.table)
library(plyr)
adply(interval.data, 1, function(x, y) sum(y[, 1] %between% c(x[1], x[2])), y = observations)
# From Till V1
# 1 14:00 19:59 4
# 2 20:00 05:59 0 # <- zero counts - wrong!
# 3 06:00 13:59 2
【问题讨论】:
-
这些总是你的时间间隔,还是这只是更大数据集的一个小例子?
-
更大集合的相同结构
-
使用带有 1 边距的
adply会使 data.table 的使用变得无关紧要。
标签: r data.table lubridate