【发布时间】:2019-11-02 18:34:38
【问题描述】:
我有一个如下所示的原始数据框:
test
id class time
1 1 start 2019-06-20 00:00:00
2 1 end 2019-06-20 00:05:00
3 1 start 2019-06-20 00:10:00
4 1 end 2019-06-20 00:15:00
5 2 end 2019-06-20 00:20:00
6 2 start 2019-06-20 00:25:00
7 2 end 2019-06-20 00:30:00
8 2 start 2019-06-20 00:35:00
9 3 end 2019-06-20 00:40:00
10 3 start 2019-06-20 00:45:00
11 3 end 2019-06-20 00:50:00
12 3 start 2019-06-20 00:55:00
我的目标是将值映射到每个 ID 的输出表仅,其中有一个 start 和一个 end 在连续顺序(时间)。因此,输出如下所示:
output
id start end
1 1 2019-06-20 00:00:00 2019-06-20 00:05:00
2 1 2019-06-20 00:10:00 2019-06-20 00:15:00
3 2 2019-06-20 00:25:00 2019-06-20 00:30:00
4 3 2019-06-20 00:45:00 2019-06-20 00:50:00
我尝试过使用dplyr 包,但是
test %>% group_by(id) %>% arrange(time) %>% starts_with("start")
Error in starts_with(., "start") : is_string(match) is not TRUE
starts_with 总是抛出错误。我想避免编写 for 循环,因为我确信这可以通过一些链操作来处理。 dplyr 或 data.table 中的解决方法有什么想法吗?
【问题讨论】:
-
试试
test %>% group_by(id) %>% arrange(time) %>% filter(class %>% starts_with("start"))
标签: r dplyr data.table mapping