当鸟在巢上时和鸟不在巢上时,我都有两次鸟类行为持续时间的视频数据。为了进行分析,我需要每小时进行一次嵌套的持续时间。但是,通常情况下,不同的行为会与小时标记重叠。例如,鸟在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
如果我没看错,如果您已经有时间(以秒为单位,则可以仅将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