如何根据两个变量之间的时间范围添加新的夜间/白天变量

活泼的

我想根据两个变量之间的时间范围添加一个新变量。我希望 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)

编辑:抱歉我忘了添加日期。

罗纳克·沙阿

一种使用方法dplyr是将start.time转换end.timePOSIXct对象,然后以不同的间隔比较值并使用 应用标签case_when

library(dplyr)

data %>%
   mutate(start.time1 = as.POSIXct(start.time, format = "%H:%M"), 
          end.time1 =  as.POSIXct(end.time, format = "%H:%M"), 
          day.night =  case_when(
          start.time1 > as.POSIXct('08:01:00', format = "%T") &
          end.time1 < as.POSIXct('20:00:00', format = "%T") ~"day",
          start.time1 > as.POSIXct('20:01:00', format = "%T") |
          start.time1 < as.POSIXct('08:00:00', format = "%T") & 
          end.time1 < as.POSIXct('08:00:00', format = "%T") ~ "night",
          TRUE ~ "mixed")) %>%
   select(names(data), day.night)

#  id start.time end.time day.night
#1 m1      10:00    16:00       day
#2 m1      16:00    19:20       day
#3 m1      19:20    20:50     mixed
#4 m2      10:00    15:20       day
#5 m2      15:20    20:50     mixed
#6 m2      20:50    22:00     night
#7 m3      06:30    07:40     night
#8 m4      06:30    07:50     night
#9 m4      07:50    08:55     mixed

编辑

如果我们也有一个最新的方法是更换日期分量startend与今天的日期进行比较。

library(dplyr)
library(lubridate)

mydata %>%
   mutate_at(vars(start, end), ymd_hms) %>%
   mutate(start_hour = hour(start), 
          end_hour = hour(end), 
    day.night = case_when(start_hour >= 8 & end_hour >= 8 & end_hour < 20 ~ "day", 
                          start_hour >= 20 &  (end_hour < 8 | end_hour <= 23) |
                         (start_hour < 8 & end_hour < 8)~ "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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何检查数组中的时间范围是否存在于 PHP 中的两个时间变量之间

来自分类Dev

如何在PHP中添加两个时间变量

来自分类Dev

如何在单引号之间添加两个变量

来自分类Dev

根据R中其他两个变量之间的数值差异创建新变量

来自分类Dev

计算两个日期之间的夜间时间

来自分类Dev

计算两个变量之间的距离并生成新变量

来自分类Dev

根据Matlab中两个单元格变量之间的匹配追加新列

来自分类Dev

php如何添加两个变量

来自分类Dev

PHP中两个时间戳变量之间的区别

来自分类Dev

PHP中两个时间戳变量之间的区别

来自分类Dev

在两个线程之间共享时间变量

来自分类Dev

无法找到两个日期时间变量之间的差异

来自分类Dev

如何在两个时间范围之间记录日志

来自分类Dev

函数范围修改全局变量中两个变量赋值之间的差异

来自分类Dev

如何根据两个变量的条件打印特定输出

来自分类Dev

如何按组求和并添加依赖于 SAS SQL 中其他两个变量的新变量

来自分类Dev

如何在两个变量之间连接反斜杠?

来自分类Dev

如何在两个C程序之间发送变量

来自分类Dev

如何在函数之间同时交换两个变量?

来自分类Dev

jQuery如何在两个之间传递变量

来自分类Dev

如何简化两个变量列表之间的循环

来自分类Dev

如何在两个函数之间共享公共变量

来自分类Dev

如何使用两个$来创建新变量

来自分类Dev

如何在theano中添加两个共享变量?

来自分类Dev

如何快速添加两个NSData变量?

来自分类Dev

如何通过javascript添加两个变量

来自分类Dev

如何在jquery的.html()中添加两个变量

来自分类Dev

如何添加这两个变量并正确输出?

来自分类Dev

两个指针变量之间的差异

Related 相关文章

热门标签

归档