該資料將用于檢查 1 小時間隔是否在時間戳 1 和時間戳 2 內。來自 library(lubridate) 的 %within% 函式可以做到這一點。但是,對于每個 id 和相應的時間戳,這需要執行 24 次(0:00:000 到 23:00:000)。所以每個 id 都應該給出 24 個結果為 TRUE 或 FALSE。
這是我們嘗試過的 lubridate 代碼:
int <- interval(timestamp1, timestamp2)
int1 <- as.POSIXct(2021-04-18 08:00:00.000),
format = "%Y-%m-%d %H:%M:%S")
Outside <- int1 %within% int
所以這是示例資料:
library(lubridate)
id <- c(1, 2 ,3 ,4 ,5),
timestamp1 <- c(2021-04-18 08:03:46.000, 2021-04-19 07:06:18.000, 2021-04-21 07:07:08.000, 2021-04-22 07:51:53.000, 2021-04-22 07:43:38.000)
timestamp2 <- c(2021-04-18 13:36:40.000, 2021-04-19 10:04:40.000, 2021-04-21 11:59:05.000, 2021-04-22 11:03:22.000, 2021-04-22 10:53:11.000)
uj5u.com熱心網友回復:
id <- c(1, 2 ,3 ,4 ,5)
timestamp1 <- structure(c(1618725826, 1618808778, 1618981628, 1619070713, 1619070218
), class = c("POSIXct", "POSIXt"), tzone = "")
timestamp2 <- structure(c(1618745800, 1618819480, 1618999145, 1619082202, 1619081591
), class = c("POSIXct", "POSIXt"), tzone = "")
matching_hours <- rep(F, 24)
names(matching_hours) <- 0:23
results <- lapply(id, function(id) {
matching_hours[as.POSIXlt(timestamp1[id])$hour:as.POSIXlt(timestamp2[id])$hour] <- T
matching_hours
})
results
# [[1]]
# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
# FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
#
# [[2]]
# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
# FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
#
# [[3]]
# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
# FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
#
# [[4]]
# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
# FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
#
# [[5]]
# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
# FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
或者,如果您更喜歡表作為輸出:
results <- lapply(id, function(id) {
matching_hours[as.POSIXlt(timestamp1[id])$hour:as.POSIXlt(timestamp2[id])$hour] <- T
data.table(t(matching_hours))
})
results <- rbindlist(results)
# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
# 1: FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# 2: FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# 3: FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# 4: FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# 5: FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/363574.html
下一篇:將Python2.7更新到3.9嘗試:fromcStringIOimportStringIO除了:fromStringIOimportStringIO
