【发布时间】:2020-06-29 19:10:10
【问题描述】:
我将如何过滤数据集以删除超过特定持续时间的所有观察结果以及低于特定阈值的任何分组观察结果 (focal_id)?我的问题原则上与OP类似。
这是数据集的一个示例:
focal_id time first_time
1 9128 08:40:30 08:40:30
2 9128 08:40:57 08:40:30
3 9128 08:41:27 08:40:30
4 9128 08:41:57 08:40:30
5 9128 08:42:27 08:40:30
6 9128 08:42:57 08:40:30
7 9128 08:43:27 08:40:30
8 9128 08:43:57 08:40:30
9 9128 08:44:17 08:40:30
10 9128 08:44:29 08:40:30
11 9128 08:44:29 08:40:30
12 9128 08:45:06 08:40:30
13 9128 08:45:28 08:40:30
14 9128 08:46:32 08:40:30
15 9128 08:46:58 08:40:30
16 9128 08:47:28 08:40:30
17 9128 08:47:28 08:40:30
18 9128 08:48:00 08:40:30
19 9128 08:48:30 08:40:30
20 9128 08:48:31 08:40:30
21 1022 06:20:02 06:20:02
22 1022 06:20:32 06:20:02
23 1022 06:21:00 06:20:02
24 1022 06:21:34 06:20:02
在上面的示例中,我想过滤掉 7 分 15 秒后(从第一次开始)的任何观察结果(即行)以及观察时间少于 5 分 30 秒的任何focal_id(即, 行) 从第一次开始。
作为第一步,我使用 dplyr 执行以下操作:
filter_dataset<-dataset %>%
group_by(focal_id) %>%
arrange(time) %>%
mutate(first_time=min(time))
必须有一种方法来计算持续时间(然后我可以用它来过滤 focal_id 的观察时间 7 分 15 秒的focal_id 的观察时间更长的持续时间超过 7 分 15 秒。
我尝试在lubridate 包中工作,首先将我的时间设置为hms,但这仅返回秒数。我还尝试了lubridate 包中的duration 函数,但它返回了NA。
这是我想要的最终输出:
focal_id time duration
1 9128 08:40:30 00:06:58
2 9128 08:40:57 00:06:58
3 9128 08:41:27 00:06:58
4 9128 08:41:57 00:06:58
5 9128 08:42:27 00:06:58
6 9128 08:42:57 00:06:58
7 9128 08:43:27 00:06:58
8 9128 08:43:57 00:06:58
9 9128 08:44:17 00:06:58
10 9128 08:44:29 00:06:58
11 9128 08:44:29 00:06:58
12 9128 08:45:06 00:06:58
13 9128 08:45:28 00:06:58
14 9128 08:46:32 00:06:58
15 9128 08:46:58 00:06:58
16 9128 08:47:28 00:06:58
17 9128 08:47:28 00:06:58
【问题讨论】:
标签: r filter group-by dplyr duration