r - 确定日期/时间间隔是否跨越中午,无论是哪一天,在 R 中

标签 r lubridate

我有一个 df描述一只鸟在夏天访问它的巢穴的次数。这包括每次访问的开始时间和结束时间 (POSIXct)。

df <- read.csv(text="
starttime,endtime,duration
2015-03-23 11:07:10,2015-03-23 17:57:10,420    
2015-03-31 22:47:10,2015-04-01 06:47:10,490    
2015-04-11 23:47:10,2015-04-12 06:17:10,400    
2015-04-14 00:07:10,2015-04-15 06:27:10,1830   
2015-06-23 02:17:10,2015-06-25 04:07:10,3000", stringsAsFactors=FALSE)
df$starttime <- as.POSIXct(df$starttime)
df$endtime <- as.POSIXct(df$endtime)
我需要确定的是每次访问是否跨越中午(12:00),无论访问日期如何。在多天访问的情况下,我还需要确定中午过去的次数。
我不知道从哪里开始。想法?

最佳答案

这是一个可以在 dplyr 的帮助下计算中午数量的函数

count_noons <- function(start, end) {
  stopifnot(all(start<end))
  full_days <- pmax(0, date(end) - date(start) - 1)
  full_days + (lubridate::hour(start) <=12) + (lubridate::hour(end) >=12) - (date(start)==date(end))
}

with(df, count_noons(starttime, endtime))
基本思想是,我看看第一天和最后一天是否过了中午(但如果开始和结束在同一天,不要重复计算),然后加上开始和结束之间的天数差(因为每一天都有一个中午)
我测试了几个案例
df <- read.csv(text="
starttime,endtime
2015-03-23 11:07:10,2015-03-23 17:57:10
2015-03-31 22:47:10,2015-04-01 06:47:10
2015-04-11 23:47:10,2015-04-12 06:17:10
2015-04-12 13:47:10,2015-04-12 19:17:10
2015-04-14 00:07:10,2015-04-15 06:27:10
2015-06-23 02:17:10,2015-06-25 04:07:10
2015-06-23 02:17:10,2015-06-25 14:07:10", stringsAsFactors=FALSE)
df$starttime <- as.POSIXct(df$starttime)
df$endtime <- as.POSIXct(df$endtime)
我得到
transform(df, noons=count_noons(starttime, endtime))
#             starttime             endtime noons
# 1 2015-03-23 11:07:10 2015-03-23 17:57:10     1
# 2 2015-03-31 22:47:10 2015-04-01 06:47:10     0
# 3 2015-04-11 23:47:10 2015-04-12 06:17:10     0
# 4 2015-04-12 13:47:10 2015-04-12 19:17:10     0
# 5 2015-04-14 00:07:10 2015-04-15 06:27:10     1
# 6 2015-06-23 02:17:10 2015-06-25 04:07:10     2
# 7 2015-06-23 02:17:10 2015-06-25 14:07:10     3

关于r - 确定日期/时间间隔是否跨越中午,无论是哪一天,在 R 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62667677/

相关文章:

r - 生成两年内每月最后一天的序列

r - 将yearmon列转换为R中的月份的最后日期

r - R's lubridate 中的独家时间间隔

r - 如何在R中添加分钟到时间

r - 在R中使用xtable写入文件

r - 如何纠正 efp() 错误 "invalid type (list) for variable ' 数据'"?

r - 在 R 中打印、cat、粘贴,以换行符分隔

r - 动物园:不允许在 'row.names' 中缺少值

r - 计算向量中连续对的数量

重新编码日期是否大于?