将两个时间段之间的R中的数据分类



我正试图在我的数据帧中创建一个新列,并让它显示"DENTRO HORÁRIO";或";FUERA HORÁRIO";当它在某个时间之间或在该时间之外时。我认为最好的方法是使用ifelse语句,但我一直在出错,最好的方式是什么?

Start1 <- format('7:00:00', format = '%H:%M:%S')
End1 <- format('19:00:00', format = "%H:%M:%S")
Ready_For_Audit$Alistamiento.horario.habil.o.fuera.horario <- Ready_For_Audit %>% 
ifelse(Start1<=format(Hora.solicitud, format = '%H:%M:%S')<=End1,
"DENTRO HORÁRIO", "FUERA HORÁRIO")

您已经接近了。在R中,不能将逻辑条件组合为形式为lower-limit <= variable <= upper-limit的双边方程。为此,您必须将等式的两个部分结合起来,即lower-limit <= variable & variable <= upper-limit。注意:如果你需要更多的条件,只需通过逻辑and和OR等的组合来构建它们。

您没有提供可复制的示例。因此,我为一天创建了一个时间线。你可能需要根据你的情况调整这个。我使用序列函数seq(),它允许我设置步骤。出于演示目的,我选择了2个小时。你可以选择任何对你有用的步骤,例如30分钟。

对于处理日期和时间,我使用{lubridate}包,使用hour()可以从时间戳中提取小时。我将此与您的营业时间/关门时间进行比较。

请耐心等待,我更改/截断了变量名;(

# create timeline
library(lubridate)  # for datetime handling
library(dplyr)
df <- tibble(
datetime = seq(from = ymd_hm("2021-05-11 00:00")
,to  = ymd_hm("2021-05-11 24:00")
, by = "2 hours")
)
# apply ifelse to timeline
df %>% 
## ---------------  check whether hour is larger/equal 7 and smaller than/equal 17
##                  adapt as appropriate or use your Start1, End1 variable.
mutate(Alistamiento = ifelse(hour(datetime) >= 7 & hour(datetime) <= 17
, "DENTRO HORÁRIO", "FUERA HORÁRIO" )
)

这产生:

# A tibble: 13 x 2
datetime            Alistamiento  
<dttm>              <chr>         
1 2021-05-11 00:00:00 FUERA HORÁRIO 
2 2021-05-11 02:00:00 FUERA HORÁRIO 
3 2021-05-11 04:00:00 FUERA HORÁRIO 
4 2021-05-11 06:00:00 FUERA HORÁRIO 
5 2021-05-11 08:00:00 DENTRO HORÁRIO
6 2021-05-11 10:00:00 DENTRO HORÁRIO
7 2021-05-11 12:00:00 DENTRO HORÁRIO
8 2021-05-11 14:00:00 DENTRO HORÁRIO
9 2021-05-11 16:00:00 DENTRO HORÁRIO
10 2021-05-11 18:00:00 FUERA HORÁRIO 
11 2021-05-11 20:00:00 FUERA HORÁRIO 
12 2021-05-11 22:00:00 FUERA HORÁRIO 
13 2021-05-12 00:00:00 FUERA HORÁRIO 

最新更新