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