Аналогично подходу do.call/lapply здесь и подходу data.table здесь , но оба имеют настройку:
- MainDF с диапазоны данных и начальной даты / конечной даты
- SubDF с вектором отдельных дат
Где пользователи ищут сводки всех диапазонов MainDF, которые перекрывают каждую дату SubDF. У меня есть
- MainDF с данными и вектором отдельных дат
- SubDF с диапазонами начальной / конечной даты
И я хочу добавить резюме к SubDF для нескольких строк данных MainDF, которые попадают в каждый диапазон SubDF. Пример:
library(lubridate)
MainDF <- data.frame(Dates = seq.Date(from = as.Date("2020-02-12"),
by = "days",
length.out = 10),
DataA = 1:10)
SubDF <- data.frame(DateFrom = as.Date(c("2020-02-13", "2020-02-16", "2020-02-19")),
DateTo = as.Date(c("2020-02-14", "2020-02-17", "2020-02-21")))
SubDF$interval <- interval(SubDF$DateFrom, SubDF$DateTo)
При использовании подхода data.table из второй ссылки, я полагаю, это должно быть что-то вроде:
MainDF[SubDF, on = .(Dates >= DateFrom, Dates <= DateTo), allow = TRUE][
, .(SummaryStat = max(DataA)), by = .(Dates)]
Но это ошибки с неиспользованными аргументами для on
. На моих реальных данных я получил результат, используя (эквивалент) max(MainDF$DataA)
, но это было 3 повторения второго значения (В моих реальных данных последняя строка не будет работать, так как у нее нет значения для DateTo ). Я подозреваю, что использование MainDF$
означает, что я подрываю группировку.
Я подозреваю, что я близок, но я действительно изо всех сил пытаюсь разобраться с data.table
мышлением для сложных случаев использования. Сводная статистика, которую я собираюсь сделать (например, данные):
Mean
& Max
данныхA length(which(DataA > 3))
difftime(last(Dates), first(Dates), units = "mins")
Dates[which.max(DataA)]
Я добавил строку interval
выше, так как справка data.table
%between%
предполагает, что можно использовать формат Dates %between% interval
но в тексте не упоминаются ни интервалы / различия, ни примеры, и мои попытки уже терпят неудачу в других местах, поэтому я не хочу концентрироваться на улучшении моего бега, пока я не могу ходить!
Я сосредоточился на подходе data.table, поскольку он используется для аналогичной проблемы, но мне было интересно, можно ли вместо этого использовать dplyr
s group_by
/ group_by_if
? group_by_if
.predicate
, похоже, ограничен тестами на столбцах (например, являются ли они факторами), а не связан с данными в строках столбцов, но я могу ошибаться.
Заранее спасибо за любая помощь!