我希望保留在网站内任何其他记录的4年内的行。 例如,这是一个包含“站点”字段和“日期”字段的表,其中包含要删除的记录。
我一直在尝试滚动连接,但是我对这些网站的移动窗口有困难。
ex_dates<-read.csv(text=getURL("https://raw.githubusercontent.com/sregalado/Reg1/master/ex_dates.csv"), header=T)
#Data
ex_dates
# ID SITE Date
#1 1 500001 9/4/2008 ###REMOVE
#2 2 500001 9/5/2013
#3 3 500001 9/6/2013
#4 4 500001 9/7/2014
#5 5 500001 9/4/2014
#6 6 500001 9/5/2015
#7 7 500001 9/6/2017
#8 8 500001 9/7/2017
#9 9 500002 9/4/2005 ###REMOVE
#10 10 500002 9/6/2012
#11 11 500002 9/7/2014
#12 12 500002 9/4/2014
#13 13 500002 9/5/2015
#14 14 500003 9/5/2012
#15 15 500003 9/6/2012
#16 16 500003 9/7/2012
#17 17 500003 9/8/2012
#18 18 500003 9/9/2012
#19 19 500003 9/10/2012
#20 20 500003 9/7/2014
#21 21 500003 9/4/2014
#22 22 500003 9/5/2015
答案 0 :(得分:0)
此解决方案利用了一些data.table
。此处的目标是按SITE
分组,然后在组中的目标之间检查每个日期与组中所有其他日期的差异。如果所有其他日期超过yearDiff
阈值,则将记录标记为TRUE
。然后,您可以在该字段上进行子集化。
library(data.table)
exDates <- fread("https://raw.githubusercontent.com/sregalado/Reg1/master/ex_dates.csv")
exDates[,Date:=as.Date(Date, format = "%m/%d/%Y")]
findRemoveByYearDiff <- function(dates, yearDiff){
sapply(seq(length(dates)), function(x) all(abs(dates[x] - dates[-x]) > (365.25 * yearDiff)))
}
exDates[,rmRecord:=findRemoveByYearDiff(Date, 4), by = SITE]
exDates <- exDates[rmRecord != TRUE,]