我有一个简单的日期矢量:
> head(as.vector(times))
[1] "2015.08.04 10:00:00.790395" "2015.08.04 10:00:00.884402"
"2015.08.04 10:00:01.015408" "2015.08.04 10:00:01.016410"
[5] "2015.08.04 10:00:01.017410" "2015.08.04 10:00:01.370429"
矢量真的很大:约500万件物品。 我想从这些数据中提取5分钟的间隔。我们来看看算法:
t0 <- strptime("2015.08.04 10:00:00.000000", format = "%Y.%m.%d %H:%M:%OS")
t1 <- strptime("2015.08.04 10:05:00.000000", format = "%Y.%m.%d %H:%M:%OS")
times <- strptime(times, format = "%Y.%m.%d %H:%M:%OS")
# indexes of last dates in each interval
lastIntervalIndexes <- c()
counter <- 1
while (t1 < times[length(times)]) {
dates <- which(times >= t0 & times < t1)
if (length(dates) > 0) {
lastIntervalIndexes[counter] <- last(dates)
counter <- counter + 1
}
t0 <- t1
t1 <- t1 + 5 * 60
}
这项工作正常但很长。如何以最快的方式进行此操作?
感谢您的关注。
答案 0 :(得分:1)
您可以使用library(lubridate)
并根据您的需要调整以下示例:
library(lubridate)
times <- c("2015.08.04 10:00:00.790395", "2015.08.04 10:00:00.884402",
"2015.08.04 10:04:01.015408", "2015.08.04 10:05:01.016410",
"2015.08.04 10:06:01.017410", "2015.08.04 10:10:01.370429")
interval <- interval(start = ymd_hms("2015.08.04 10:00:00.000000"),
end = ymd_hms("2015.08.04 10:05:00.000000"))
times <- ymd_hms(times)
inside <- times %within% interval
times[inside]
# "2015-08-04 10:00:00 UTC" "2015-08-04 10:00:00 UTC" "2015-08-04 10:04:01 UTC"
请注意,我已在times
更改了您的部分时间。