Я хочу добавить функцию ifelse к переменной времени только в переменной даты и времени в rstudio без выделения даты и времени.
Пробовали функцию ifelse только вызова времени.
Обновлено: я хочу, чтобы время с 8:01 до 20:00 = день и время с 20:01 до 8:00 = ночь, и все, что перекрывает оба, смешивалось.
#Current database
id<-c("m1","m1","m1","m2","m2","m2","m3","m4","m4")
x<-c("2020-01-03 10:00:00","2020-01-03 16:00:00","2020-01-03 19:20:00","2020-01-05 10:00:00","2020-01-05 15:20:00","2020-01-05 20:50:00","2020-01-06 06:30:00","2020-01-08 06:30:00","2020-01-08 07:50:00")
start<-strptime(x,"%Y-%m-%d %H:%M:%S")
y<-c("2020-01-03 16:00:00","2020-01-03 19:20:00","2020-01-03 20:50:00","2020-01-05 15:20:00","2020-01-05 20:50:00","2020-01-05 22:00:00","2020-01-06 07:40:00","2020-01-08 07:50:00","2020-01-08 08:55:00")
end<-strptime(y,"%Y-%m-%d %H:%M:%S")
mydata<-data.frame(id,start,end)
#output
day.night<-c("day","day","mixed","day","mixed","night","night","night","mixed")
newdata<-cbind(mydata,day.night)
В моем текущем методе я получаю либо всю ночную функцию, либо всю смешанную функцию, либо еще NA.
Каковы ваши критерии для day, mixed и night?
Я добавил эту информацию сейчас @Andrew
Актуально: преобразовать символ во время в R





Вот решение, в котором используется dplyr::case_when с пользовательской функцией, использующей lubridate функции. Надеюсь это поможет!
library(dplyr)
# Creating the function to filter with
hour_min <- function(x) lubridate::hour(x) + lubridate::minute(x)/60
mydata %>%
mutate(day.night = case_when(hour_min(start) > 8 & hour_min(start) <= 20 & hour_min(end) > 8 & hour_min(end) <= 20 ~ "day",
(hour_min(start) <= 8 | hour_min(start) > 20) & (hour_min(end) <= 8 | hour_min(end) > 20) ~ "night",
TRUE ~ "mixed"))
id start end day.night
1 m1 2020-01-03 10:00:00 2020-01-03 16:00:00 day
2 m1 2020-01-03 16:00:00 2020-01-03 19:20:00 day
3 m1 2020-01-03 19:20:00 2020-01-03 20:50:00 mixed
4 m2 2020-01-05 10:00:00 2020-01-05 15:20:00 day
5 m2 2020-01-05 15:20:00 2020-01-05 20:50:00 mixed
6 m2 2020-01-05 20:50:00 2020-01-05 22:00:00 night
7 m3 2020-01-06 06:30:00 2020-01-06 07:40:00 night
8 m4 2020-01-08 06:30:00 2020-01-08 07:50:00 night
9 m4 2020-01-08 07:50:00 2020-01-08 08:55:00 mixed
Ознакомьтесь с пакетом
hms, содержащим одноименную функцию.