比较R中不同长度向量之间的日期范围

时间:2017-05-10 18:43:57

标签: r date datetime

我在下面的例子中遇到了一点麻烦,我们将非常感谢任何帮助。

我有两个向量 x y x 是一个长度为78,725的向量,其中包含"2017-04-23 06:55:00 UTC" to "2017-04-27 17:00:52 UTC"的日期范围,但每个元素之间的时间间隔从1秒到几小时不等。 y 是一个长度为8640的向量,其中包含"2017-04-23 00:00:00 UTC" to "2017-04-23 23:59:50 UTC"的日期范围,增量为10秒。我想确定哪个x >= y and x < y

示例数据

x <- as.POSIXct(c("2017-04-24 18:32:35", "2017-04-24 14:01:03", "2017-04-24 17:51:35",
                  "2017-04-24 15:42:22", "2017-04-24 13:00:51", "2017-04-24 16:56:28",
                  "2017-04-24 17:17:32", "2017-04-24 15:03:34", "2017-04-24 22:40:47",
                  "2017-04-23 17:37:15"), tz = "UTC")
base.date <- as.POSIXct("2017-04-23 0:00:00", tz = "UTC")
every = 10
seconds.in.day = 60*60*24
y <- seq(base.date, length = seconds.in.day / every, by = every)

结果我想

x的第10个位置"2017-04-23 17:37:15 UTC"位于y元素6344和6345之间。

尝试以下

mapply(function(x, y) x >= y & x < y, as.data.frame(x), as.data.frame(y))

Position(function(x) x >= y & x < y, x)

vapply(x, function(x) x >= y & x < y, logical(NROW(x)))

这些都没有归还我想要的东西

1 个答案:

答案 0 :(得分:0)

您的样本数据很难,因为x中只有一项观察值属于y。所以我写了以下内容来解释这一点。试一试......

# Filter down only to observations within the date range of y
 x_range <- x[max(y) >= x & min(y) <= x]

 for (i in length(x_range)) {
   upper.y.index <- vector('numeric')
   upper.y.index[i] <- which.max(y < x_range[i])

   lower.y.index <- vector('numeric')
   lower.y.index[i] <- which.max(y >= x_range[i])
 }


 upper.y.index
 [1] 1
 lower.y.index
 [1] 6345