我在下面的例子中遇到了一点麻烦,我们将非常感谢任何帮助。
我有两个向量 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)))
这些都没有归还我想要的东西
答案 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