【发布时间】:2019-05-01 23:36:51
【问题描述】:
我想根据条件“开始”在一个列中找到时间戳,然后在同一列中找到满足另一个条件的第一行的时间戳,从而找到两个时间戳之间的差异, “停止”。基本上我们使用一个程序来“开始”一个行为并“停止”一个行为,这样我们就可以计算行为的持续时间。
我已经尝试修改这篇文章中的代码:subtract value from previous row by group
但我不知道如何让潜在客户满足同一列即将到来的行中的条件。由于可能存在具有“开始”但没有“停止”的“事件”行为,这一事实使情况变得复杂。示例数据框。
Data
Behavior Modifier_1 Time_relative_s
BodyLength Start 122.11
Growl Start 129.70
Body Length Stop 132.26
Body Length Start 157.79
Body Length Stop 258.85
Body Length Start 270.12
Bark Start 272.26
Growl Start 275.68
Body Length Stop 295.37
我想要这个:
Behavior Modifier_1 Time_relative_s diff
BodyLength Start 122.11 10.15
Growl Start 129.70
Body Length Stop 132.26
Body Length Start 157.79 101.06
Body Length Stop 258.85
Body Length Start 270.12 25.25
Bark Start 272.26
Growl Start 275.68
Body Length Stop 295.37
我尝试过使用 dplyr 管道:
test<-u%>%
filter(Modifier_1 %in% c("Start","Stop")) %>%
arrange(Time_Relative_s) %>%
mutate(diff = lead(Time_Relative_s, default = first(Time_Relative_s=="Stop")-Time-Relative_s)
但我不能正确使用潜在客户,因为这只会在 diff 列中为我返回 Time_Relative_s。有什么建议么?感谢您的帮助!
【问题讨论】:
-
能否请您提供您的日期范围或一些reproducible example?
-
示例数据由以下@akrun 友情提供。除了我在上面尝试过的代码之外,我真的没有可重现的错误示例(但只是没有返回任何内容。我想我希望从人们那里得到一些建议(使用 lag/铅或其他任何东西)。