删除r中不遵循日期序列的事件

删除r中不遵循日期序列的事件,r,dataframe,date,dplyr,R,Dataframe,Date,Dplyr,我想删除不遵循数据帧a中显示的日期序列的事件。例如,事件2和4没有日期序列,缺少一些天。因此,我希望将NAs分配给这些事件,就像在desire_output列中一样,或者从dataframe中删除它们 Event<-c(1,1,1,2,2,2,2,3,3,3,4,4,4,4) Dates<- as.Date(c("2018-10-22", "2018-10-23", "2018-10-24", "2019-01-03", "2019-01-04", "2019-01-06", "20

我想删除不遵循数据帧a中显示的日期序列的事件。例如,事件2和4没有日期序列,缺少一些天。因此,我希望将NAs分配给这些事件,就像在desire_output列中一样,或者从dataframe中删除它们

Event<-c(1,1,1,2,2,2,2,3,3,3,4,4,4,4)
Dates<- as.Date(c("2018-10-22", "2018-10-23", "2018-10-24", "2019-01-03", "2019-01-04", "2019-01-06", "2019-01-07", "2019-05-11", "2019-05-12", "2019-05-13", "2020-02-21", "2020-02-23", "2020-02-27", "2020-02-28"))
Desire_output<- as.Date(c("2018-10-22", "2018-10-23", "2018-10-24", NA, NA, NA, NA, "2019-05-11", "2019-05-12", "2019-05-13", NA, NA, NA, NA)) 
A<- data.frame(Event, Dates, Desire_output)
有什么好办法解决这个问题吗?

我们可以按过滤器分组。按“事件”分组检查“日期”的所有差异是否等于1以筛选这些组

library(dplyr)
A  %>% 
    group_by(Event) %>% 
    filter(all(diff(Dates) == 1))
    # or with difference between lead and current element
    #filter(all((lead(Dates, default = last(Dates)) - Dates) <2))
我们可以按过滤器分组。按“事件”分组检查“日期”的所有差异是否等于1以筛选这些组

library(dplyr)
A  %>% 
    group_by(Event) %>% 
    filter(all(diff(Dates) == 1))
    # or with difference between lead and current element
    #filter(all((lead(Dates, default = last(Dates)) - Dates) <2))

我们可以用上一个日期减去当前日期,然后检查每个事件的所有值是否小于等于1。使用dplyr:


我们可以用上一个日期减去当前日期,然后检查每个事件的所有值是否小于等于1。使用dplyr:

附加选项

df %>% 
  group_by(Event) %>% 
  filter(is.na(any((Dates - lag(Dates))>1)))
附加选项

df %>% 
  group_by(Event) %>% 
  filter(is.na(any((Dates - lag(Dates))>1)))

无论是不可省略项还是子项!is.naDesire_输出或dplyr::filterA!is.naDesire_outputNo,但是欲望_的输出是我希望它拥有它的一个例子。不在真实数据帧中。na.omitA或subset!is.naDesire_输出或dplyr::filterA!is.naDesire_outputNo,但是欲望_的输出是我希望它拥有它的一个例子。不在真实的数据帧中。
library(dplyr)

A %>%
  group_by(Event) %>%
  filter(all(Dates - lag(Dates, default = first(Dates)) <= 1))

#  Event Dates      Desire_output
#  <dbl> <date>     <date>       
#1     1 2018-10-22 2018-10-22   
#2     1 2018-10-23 2018-10-23   
#3     1 2018-10-24 2018-10-24   
#4     3 2019-05-11 2019-05-11   
#5     3 2019-05-12 2019-05-12   
#6     3 2019-05-13 2019-05-13   
library(data.table)
setDT(A)[, .SD[all(Dates - shift(Dates, fill = first(Dates)) <= 1)], Event]
df %>% 
  group_by(Event) %>% 
  filter(is.na(any((Dates - lag(Dates))>1)))