R时间间隔:当样品超过小时标记时,按一天中的小时分组

问题描述 投票:0回答:1

当鸟在巢上时和鸟不在巢上时,我都有两次鸟类行为持续时间的视频数据。为了进行分析,我需要每小时进行一次嵌套的持续时间。但是,通常情况下,不同的行为会与小时标记重叠。例如,鸟在4:10-4:42和4:50-5:20的巢穴中,我需要将第二个时期分开到4:50-5:00和5:00-5:20,以便我每小时可以求和。我已经使用lubridate软件包寻找了很长时间,但没有找到一种方法可以做,但是我认为那里一定有东西。有什么建议吗?

示例数据如下。 “ off.time.diff”是“ off.bout.id”之间的秒差,与“ on.time.diff”相同。此处以一个示例为例,这只鸟从17:25:39到18:03:29开着。我可以获得总时间(2270秒),但无法弄清楚每小时如何分开。

Event   DT.event        off.bout.ID  on.bout.ID  off.time.diff  on.time.diff
off     4/27/12 17:25:13    1          0           NA               NA
on      4/27/12 17:25:39    1          1           26               NA
off     4/27/12 18:03:29    2          1           NA              2270
on      4/27/12 18:03:57    2          2           28               NA
off     4/27/12 19:41:16    3          2           NA              5839
on      4/27/12 19:43:50    3          3           154              NA
off     4/28/12 6:23:57     4          3           NA              38407
on      4/28/12 6:32:13     4          4           496              NA
off     4/28/12 6:40:20     5          4           NA              487
on      4/28/12 6:40:48     5          5           28               NA
off     4/28/12 8:16:07     6          5           NA              5719
r datetime time intervals lubridate
1个回答
0
投票

如果我没看错,如果您已经有时间(以秒为单位,则可以仅将round()trunc()mutate结合使用:

library(dplyr)

# Yours data
a =  
read.csv(header = F, sep = ";",
         col.names = c("Event","DT.event","off.bout.ID","on.bout.ID","off.time.diff","on.time.diff"),
         text = gsub(pattern = "\\s+{2}",replacement = ";", 
                     x="off     4/27/12 17:25:13    1          0           NA               NA
                        on      4/27/12 17:25:39    1          1           26               NA
                        off     4/27/12 18:03:29    2          1           NA               2270
                        on      4/27/12 18:03:57    2          2           28               NA
                        off     4/27/12 19:41:16    3          2           NA               5839
                        on      4/27/12 19:43:50    3          3           154              NA
                        off     4/28/12 6:23:57     4          3           NA               38407
                        on      4/28/12 6:32:13     4          4           496              NA
                        off     4/28/12 6:40:20     5          4           NA               487
                        on      4/28/12 6:40:48     5          5           28               NA
                        off     4/28/12 8:16:07     6          5           NA               5719"
  )
) 

#Using mutate
a = a %>% mutate(# or trunc
  on.diff.hour = round(on.time.diff/3600,digits = 2)
)

输出:

   Event         DT.event off.bout.ID on.bout.ID off.time.diff on.time.diff on.diff.hour
1    off 4/27/12 17:25:13           1          0            NA           NA           NA
2     on 4/27/12 17:25:39           1          1            26           NA           NA
3    off 4/27/12 18:03:29           2          1            NA         2270         0.63
4     on 4/27/12 18:03:57           2          2            28           NA           NA
5    off 4/27/12 19:41:16           3          2            NA         5839         1.62
6     on 4/27/12 19:43:50           3          3           154           NA           NA
7    off  4/28/12 6:23:57           4          3            NA        38407        10.67
8     on  4/28/12 6:32:13           4          4           496           NA           NA
9    off  4/28/12 6:40:20           5          4            NA          487         0.14
10    on  4/28/12 6:40:48           5          5            28           NA           NA
11   off  4/28/12 8:16:07           6          5            NA         5719         1.59
© www.soinside.com 2019 - 2024. All rights reserved.