根据 R 中的生产班次时间更改日期
Changing Dates as per production shift timings in R
我想根据时间戳更改数据条目的日期。基本上,公司在早上 7:00am 开始运营,一直工作到第二天 6:59am。整个持续时间计为 1 天。
所以基本上 2020 年 11 月 19 日意味着从 19-11-2020 07:00 到 20-11-2020 06:59
我有这个数据集
structure(list(Timestamp = structure(c(1593714765.03054, 1593714824.99918,
1593714884.96776, 1593714945.01468, 1593715005.01454, 1593715064.98314,
1593715125.03002, 1593715185.18608, 1593715244.99822, 1593715304.96657
), class = c("POSIXct", "POSIXt"), tzone = "Asia/Kolkata"), Date = structure(c(18446,
18446, 18446, 18446, 18446, 18446, 18446, 18446, 18446, 18446
), class = "Date"), Time = c("00:02", "00:03", "00:04", "00:05",
"00:06", "00:07", "00:08", "00:09", "00:10", "00:11"), `HCM 18` = c(7,
8, 7, 8, 7, 7, 8, 7, 8, 7), `HCM 19` = c(8, 8, 8, 8, 8, 7, 8,
8, 8, 8), `HCM 20` = c(7, 7, 7, 7, 8, 7, 4, 8, 7, 7), `HCM 21` = c(8,
7, 8, 8, 8, 7, 8, 8, 8, 8), `HCM 22` = c(8, 7, 8, 7, 7, 8, 7,
8, 7, 7), `HCM 23` = c(8, 7, 8, 8, 8, 7, 8, 8, 8, 8), `HCM 24` = c(7,
7, 7, 6, 7, 7, 7, 6, 4, 0), `HCM 25` = c(8, 8, 8, 7, 8, 8, 8,
7, 8, 8), `HCM 54` = c(7, 8, 8, 7, 6, 8, 7, 8, 8, 7), `HCM 55` = c(8,
7, 8, 7, 8, 8, 7, 8, 8, 7), `HCM 56` = c(8, 8, 8, 7, 8, 8, 7,
8, 8, 7), `HCM 57` = c(8, 8, 7, 8, 8, 7, 8, 8, 7, 8), `HCM 58` = c(8,
8, 7, 8, 7, 8, 7, 8, 7, 8), `HCM 59` = c(8, 1, 6, 8, 8, 7, 8,
8, 7, 8), `HCM 60` = c(8, 7, 8, 8, 7, 8, 8, 7, 8, 8)), row.names = c(NA,
10L), class = "data.frame")
所以现在我需要将时间小于 7:00am 的日期更改为前一天。
我想在 R 中做这个。
您可以使用 data.table
包中的 ITime
class。 ITime
可以将一天中的时间存储为一天中的整数秒数。创建一个变量 open_time
来存储 7:00 AM 的秒数。然后,对于每个Timestamp
(转换为一个ITime
),查看时间是否小于open_time
,如果是,则使用Date - 1
而不是[=19] =].为了演示,创建了一个新列 (NewDate
)。
library(dplyr)
library(lubridate)
library(data.table)
open_time <- as.ITime(as.POSIXct("07:00", format = "%H:%M"))
df %>%
mutate(NewTime = as.ITime(Timestamp),
NewDate = if_else(
NewTime < open_time,
Date - 1,
Date
)
)
我想根据时间戳更改数据条目的日期。基本上,公司在早上 7:00am 开始运营,一直工作到第二天 6:59am。整个持续时间计为 1 天。 所以基本上 2020 年 11 月 19 日意味着从 19-11-2020 07:00 到 20-11-2020 06:59
我有这个数据集
structure(list(Timestamp = structure(c(1593714765.03054, 1593714824.99918,
1593714884.96776, 1593714945.01468, 1593715005.01454, 1593715064.98314,
1593715125.03002, 1593715185.18608, 1593715244.99822, 1593715304.96657
), class = c("POSIXct", "POSIXt"), tzone = "Asia/Kolkata"), Date = structure(c(18446,
18446, 18446, 18446, 18446, 18446, 18446, 18446, 18446, 18446
), class = "Date"), Time = c("00:02", "00:03", "00:04", "00:05",
"00:06", "00:07", "00:08", "00:09", "00:10", "00:11"), `HCM 18` = c(7,
8, 7, 8, 7, 7, 8, 7, 8, 7), `HCM 19` = c(8, 8, 8, 8, 8, 7, 8,
8, 8, 8), `HCM 20` = c(7, 7, 7, 7, 8, 7, 4, 8, 7, 7), `HCM 21` = c(8,
7, 8, 8, 8, 7, 8, 8, 8, 8), `HCM 22` = c(8, 7, 8, 7, 7, 8, 7,
8, 7, 7), `HCM 23` = c(8, 7, 8, 8, 8, 7, 8, 8, 8, 8), `HCM 24` = c(7,
7, 7, 6, 7, 7, 7, 6, 4, 0), `HCM 25` = c(8, 8, 8, 7, 8, 8, 8,
7, 8, 8), `HCM 54` = c(7, 8, 8, 7, 6, 8, 7, 8, 8, 7), `HCM 55` = c(8,
7, 8, 7, 8, 8, 7, 8, 8, 7), `HCM 56` = c(8, 8, 8, 7, 8, 8, 7,
8, 8, 7), `HCM 57` = c(8, 8, 7, 8, 8, 7, 8, 8, 7, 8), `HCM 58` = c(8,
8, 7, 8, 7, 8, 7, 8, 7, 8), `HCM 59` = c(8, 1, 6, 8, 8, 7, 8,
8, 7, 8), `HCM 60` = c(8, 7, 8, 8, 7, 8, 8, 7, 8, 8)), row.names = c(NA,
10L), class = "data.frame")
所以现在我需要将时间小于 7:00am 的日期更改为前一天。
我想在 R 中做这个。
您可以使用 data.table
包中的 ITime
class。 ITime
可以将一天中的时间存储为一天中的整数秒数。创建一个变量 open_time
来存储 7:00 AM 的秒数。然后,对于每个Timestamp
(转换为一个ITime
),查看时间是否小于open_time
,如果是,则使用Date - 1
而不是[=19] =].为了演示,创建了一个新列 (NewDate
)。
library(dplyr)
library(lubridate)
library(data.table)
open_time <- as.ITime(as.POSIXct("07:00", format = "%H:%M"))
df %>%
mutate(NewTime = as.ITime(Timestamp),
NewDate = if_else(
NewTime < open_time,
Date - 1,
Date
)
)