I have a data.table, which has multiple date columns. The are K
date columns, whereby K
changes. I have calculated the time difference between the columns:
K <- numberOfYears
dateCols = c("fromdatenext", paste0("fromdate" , 1:K))
# create formulas dynamically
all_operations = lapply(seq_len(length(dateCols) - 1), function(i){
as.formula(paste("~difftime(", dateCols[i + 1], ",", dateCols[i],", units = c('weeks'))"))
})
df %>%
mutate_(.dots = setNames(all_operations, paste0("Diff", seq_len(length(dateCols) - 1))))
and get something like:
fromdatenext fromdate1 fromdate2 fromdate3 fromdate4 Diff1 Diff2 Diff3 Diff4
1 2018-01-01 2017-01-01 2016-01-01 2015-01-01 2014-01-01 -52.14286 weeks -52.28571 weeks -52.14286 weeks -52.14286 weeks
2 2018-10-01 2017-10-01 2016-10-01 2015-10-01 2014-10-01 -52.14286 weeks -52.14286 weeks -52.28571 weeks -53.14286 weeks
3 2018-09-08 2017-09-08 2016-09-08 2015-09-08 2014-09-08 -52.14286 weeks -52.14286 weeks -52.28571 weeks -52.14286 weeks
4 2018-09-22 2017-09-22 2016-09-22 2015-09-22 2014-09-22 -52.14286 weeks -52.14286 weeks -52.28571 weeks -52.14286 weeks
5 2018-05-01 2017-05-01 2016-05-01 2015-05-01 2014-05-01 -52.14286 weeks -52.14286 weeks -52.28571 weeks -52.14286 weeks
6 2018-01-01 2017-01-01 2016-01-01 2015-01-01 2014-01-01 -50.14286 weeks -52.28571 weeks -52.14286 weeks -52.14286 weeks
Now i need to remove all rows, which do not have equal time interval. How can this be done dynamically, such that when K
it will still work?
so the desired result would be:
fromdatenext fromdate1 fromdate2 fromdate3 fromdate4 Diff1 Diff2 Diff3 Diff4
1 2018-01-01 2017-01-01 2016-01-01 2015-01-01 2014-01-01 -52.14286 weeks -52.28571 weeks -52.14286 weeks -52.14286 weeks
3 2018-09-08 2017-09-08 2016-09-08 2015-09-08 2014-09-08 -52.14286 weeks -52.14286 weeks -52.28571 weeks -52.14286 weeks
4 2018-09-22 2017-09-22 2016-09-22 2015-09-22 2014-09-22 -52.14286 weeks -52.14286 weeks -52.28571 weeks -52.14286 weeks
5 2018-05-01 2017-05-01 2016-05-01 2015-05-01 2014-05-01 -52.14286 weeks -52.14286 weeks -52.28571 weeks -52.14286 weeks