我有一个带有日期的数据框,我需要消除非连续值,但是确定连续状态的方法分为两列:
ID | END | BEG
1 | 9999-12-31 | 2017-07-01
1 | 2017-06-30 | 2016-01-01
1 | 2015-12-31 | 2015-11-12
1 | 2008-07-26 | 2003-02-24
对于这种特定情况,预期结果将是
ID | END | BEG
1 | 9999-12-31 | 2017-07-01
1 | 2017-06-30 | 2016-01-01
1 | 2015-12-31 | 2015-11-12
还可能出现日期(订购的日期)显示此模式的情况:
ID | END | BEG
2 | 9999-12-31 | 2018-04-01
2 | 9999-12-31 | 2017-01-01
2 | 2016-07-31 | 2014-07-15
2 | 2011-08-31 | 2009-01-01
2 | 2008-12-31 | 1991-11-04
在这种情况下,由于前两个条目的结尾均为9999-12-31,因此我们从第三行开始,并立即发现以下情况不是连续的,因此对于该特定情况,仅保留该日期,而保留为结果:
ID | END | BEG
2 | 2016-07-31 | 2014-07-15
是否可以使用dplyr软件包来做到这一点? 预先感谢。
答案 0 :(得分:1)
检查此解决方案:
library(tidyverse)
library(lubridate)
df %>%
mutate_at(2:3, ymd) %>%
mutate(
BEG_lag = lag(BEG),
cons = END == BEG_lag - days(1)
) %>%
fill(cons, .direction = 'up') %>%
filter(cons) %>%
select(1:3)